X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=common%2Fcmd_ubifs.c;h=8e9a4e5038d87c19cfda9850dab0dbfa3d7446b0;hb=65990d568074ad878cbc7e4eb1053508e3707cb6;hp=a0ec184486dc08a330e063a97b55990fab69f7ae;hpb=09b4a9cf4003599f2cd609587dfa5f0b754640ed;p=karo-tx-uboot.git diff --git a/common/cmd_ubifs.c b/common/cmd_ubifs.c index a0ec184486..8e9a4e5038 100644 --- a/common/cmd_ubifs.c +++ b/common/cmd_ubifs.c @@ -2,24 +2,7 @@ * (C) Copyright 2008 * Stefan Roese, DENX Software Engineering, sr@denx.de. * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * + * SPDX-License-Identifier: GPL-2.0+ */ @@ -33,22 +16,19 @@ #include #include +#include "../fs/ubifs/ubifs.h" + static int ubifs_initialized; static int ubifs_mounted; -/* Prototypes */ -int ubifs_init(void); -int ubifs_mount(char *vol_name); -int ubifs_ls(char *dir_name); -int ubifs_load(char *filename, u32 addr, u32 size); - -int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +static int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) { char *vol_name; int ret; if (argc != 2) - return cmd_usage(cmdtp); + return CMD_RET_USAGE; vol_name = argv[1]; debug("Using volume %s\n", vol_name); @@ -58,7 +38,7 @@ int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) ubifs_initialized = 1; } - ret = ubifs_mount(vol_name); + ret = uboot_ubifs_mount(vol_name); if (ret) return -1; @@ -67,13 +47,49 @@ int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return 0; } -int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +int ubifs_is_mounted(void) +{ + return ubifs_mounted; +} + +void cmd_ubifs_umount(void) +{ + + if (ubifs_sb) { + printf("Unmounting UBIFS volume %s!\n", + ((struct ubifs_info *)(ubifs_sb->s_fs_info))->vi.name); + ubifs_umount(ubifs_sb->s_fs_info); + } + + ubifs_sb = NULL; + ubifs_mounted = 0; + ubifs_initialized = 0; +} + +static int do_ubifs_umount(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) +{ + if (argc != 1) + return CMD_RET_USAGE; + + if (ubifs_initialized == 0) { + printf("No UBIFS volume mounted!\n"); + return -1; + } + + cmd_ubifs_umount(); + + return 0; +} + +static int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) { char *filename = "/"; int ret; if (!ubifs_mounted) { - printf("UBIFS not mounted, use ubifs mount to mount volume first!\n"); + printf("UBIFS not mounted, use ubifsmount to mount volume first!\n"); return -1; } @@ -82,13 +98,16 @@ int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) debug("Using filename %s\n", filename); ret = ubifs_ls(filename); - if (ret) - printf("%s not found!\n", filename); + if (ret) { + printf("** File not found %s **\n", filename); + ret = CMD_RET_FAILURE; + } return ret; } -int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +static int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) { char *filename; char *endp; @@ -102,24 +121,26 @@ int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) } if (argc < 3) - return cmd_usage(cmdtp); + return CMD_RET_USAGE; addr = simple_strtoul(argv[1], &endp, 16); if (endp == argv[1]) - return cmd_usage(cmdtp); + return CMD_RET_USAGE; filename = argv[2]; if (argc == 4) { size = simple_strtoul(argv[3], &endp, 16); if (endp == argv[3]) - return cmd_usage(cmdtp); + return CMD_RET_USAGE; } debug("Loading file '%s' to address 0x%08x (size %d)\n", filename, addr, size); ret = ubifs_load(filename, addr, size); - if (ret) - printf("%s not found!\n", filename); + if (ret) { + printf("** File not found %s **\n", filename); + ret = CMD_RET_FAILURE; + } return ret; } @@ -131,6 +152,12 @@ U_BOOT_CMD( " - mount 'volume-name' volume" ); +U_BOOT_CMD( + ubifsumount, 1, 0, do_ubifs_umount, + "unmount UBIFS volume", + " - unmount current volume" +); + U_BOOT_CMD( ubifsls, 2, 0, do_ubifs_ls, "list files in a directory",