From e694adc6a4716fc589693eb8eb8e67bbf54e8edc Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Thu, 5 Jul 2007 18:01:52 +0200 Subject: [PATCH] svn_rev_420 - do more POSIX: - use DIR instead of struct dirent - use (struct dirent)->d_name instead of (struct dirent)->name - switch to a new layout for U_BOOT_CMD: - use C99 initializers to be able to add more fields to the command struct - add aliases for commands (needed mainly for help -> ? and test -> [ - This is not done for all commands yet, but the compiler will tell you ;) --- common/Kconfig | 8 ++- common/cmd_boot.c | 22 ++++---- common/cmd_edit.c | 11 ++-- common/cmd_exec.c | 14 +++--- common/cmd_flash.c | 43 +++++----------- common/cmd_fs.c | 107 +++++++++++++++++++-------------------- common/cmd_mem.c | 55 +++++++++++--------- common/cmd_misc.c | 53 ++++++++++++------- common/cmd_net.c | 67 +++++++++++++----------- common/command.c | 123 ++++++++++++++++++++++++--------------------- common/dlmalloc.c | 4 +- common/env.c | 23 +++++---- common/mtdpart.c | 20 ++++---- common/startup.c | 19 +++++-- fs/cramfs/cramfs.c | 12 ++--- fs/devfs.c | 12 ++--- fs/fs.c | 12 ++--- fs/ramfs.c | 12 ++--- include/command.h | 22 ++++---- include/fs.h | 14 +++--- lib_generic/misc.c | 12 ++--- net/ping.c | 10 ++-- 22 files changed, 355 insertions(+), 320 deletions(-) diff --git a/common/Kconfig b/common/Kconfig index f7ded5cb3..6845d9c2a 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -98,6 +98,10 @@ config CMD_ENVIRONMENT depends on FS prompt "envsave / envload" +config CMD_CLEAR + bool + prompt "clear" + config CMD_CONSOLE bool prompt "coninfo" @@ -159,9 +163,9 @@ config CMD_LOADS bool prompt "loads" -config CMD_MALLOCINFO +config CMD_MEMINFO bool - prompt "mallocinfo" + prompt "meminfo" config CMD_SAVES bool diff --git a/common/cmd_boot.c b/common/cmd_boot.c index 3b77784bd..43fc18259 100644 --- a/common/cmd_boot.c +++ b/common/cmd_boot.c @@ -73,17 +73,19 @@ int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) /* -------------------------------------------------------------------- */ -U_BOOT_CMD( - go, CONFIG_MAXARGS, 1, do_go, - "go - start application at address 'addr'\n", +U_BOOT_CMD_START(go) + .maxargs = CONFIG_MAXARGS, + .cmd = do_go, + .usage = "go - start application at address 'addr'\n", + U_BOOT_CMD_HELP( "addr [arg ...]\n - start application at address 'addr'\n" - " passing 'arg' as arguments\n" -); + " passing 'arg' as arguments\n") +U_BOOT_CMD_END extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); -U_BOOT_CMD( - reset, CONFIG_MAXARGS, 1, do_reset, - "reset - Perform RESET of the CPU\n", - NULL -); +U_BOOT_CMD_START(reset) + .maxargs = CONFIG_MAXARGS, + .cmd = do_reset, + .usage = "reset - Perform RESET of the CPU\n", +U_BOOT_CMD_END diff --git a/common/cmd_edit.c b/common/cmd_edit.c index 61d7ce3b5..edc8fd09b 100644 --- a/common/cmd_edit.c +++ b/common/cmd_edit.c @@ -469,9 +469,8 @@ out: return 0; } -int do_edit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); -U_BOOT_CMD( - edit, 2, 0, do_edit, - "edit - edit a file\n", - " - edit \n" -); +U_BOOT_CMD_START(edit) + .maxargs = 2, + .cmd = do_edit, + .usage = "edit - edit a file\n", +U_BOOT_CMD_END diff --git a/common/cmd_exec.c b/common/cmd_exec.c index bbe5c5641..78cbfd703 100644 --- a/common/cmd_exec.c +++ b/common/cmd_exec.c @@ -44,7 +44,7 @@ out: return NULL; } -int do_exec(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) +static int do_exec(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) { int i; char *script; @@ -70,10 +70,8 @@ out: return 1; } -int do_exec (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); -U_BOOT_CMD( - exec, CONFIG_MAXARGS, 1, do_exec, - "exec - execute a script\n", - " - execute \n" -); - +U_BOOT_CMD_START(exec) + .maxargs = CONFIG_MAXARGS, + .cmd = do_exec, + .usage = "exec - execute a script\n", +U_BOOT_CMD_END diff --git a/common/cmd_flash.c b/common/cmd_flash.c index 56ccb6f7e..f13901596 100644 --- a/common/cmd_flash.c +++ b/common/cmd_flash.c @@ -60,6 +60,13 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } +U_BOOT_CMD_START(erase) + .maxargs = 2, + .cmd = do_flerase, + .usage = "erase - erase FLASH memory\n", + U_BOOT_CMD_HELP("write me\n") +U_BOOT_CMD_END + int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { int p; @@ -89,33 +96,9 @@ int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return rcode; } -/**************************************************/ - -U_BOOT_CMD( - erase, 2, 0, do_flerase, - "erase - erase FLASH memory\n", - "write me\n" -); - -U_BOOT_CMD( - protect, 4, 1, do_protect, - "protect - enable or disable FLASH write protection\n", - "on start end\n" - " - protect FLASH from addr 'start' to addr 'end'\n" - "protect on start +len\n" - " - protect FLASH from addr 'start' to end of sect " - "w/addr 'start'+'len'-1\n" - "protect on N:SF[-SL]\n" - " - protect sectors SF-SL in FLASH bank # N\n" - "protect on bank N\n - protect FLASH bank # N\n" - "protect on all\n - protect all FLASH banks\n" - "protect off start end\n" - " - make FLASH from addr 'start' to addr 'end' writable\n" - "protect off start +len\n" - " - make FLASH from addr 'start' to end of sect " - "w/addr 'start'+'len'-1 wrtable\n" - "protect off N:SF[-SL]\n" - " - make sectors SF-SL writable in FLASH bank # N\n" - "protect off bank N\n - make FLASH bank # N writable\n" - "protect off all\n - make all FLASH banks writable\n" -); +U_BOOT_CMD_START(protect) + .maxargs = 4, + .cmd = do_protect, + .usage = "protect - enable or disable FLASH write protection\n", + U_BOOT_CMD_HELP("write me\n") +U_BOOT_CMD_END diff --git a/common/cmd_fs.c b/common/cmd_fs.c index 63682f929..6a0b4f7d4 100644 --- a/common/cmd_fs.c +++ b/common/cmd_fs.c @@ -22,7 +22,7 @@ static void ls_one(const char *path, struct stat *s) int ls(const char *path, ulong flags) { - struct dir *dir; + DIR *dir; struct dirent *d; char tmp[PATH_MAX]; struct stat s; @@ -45,10 +45,10 @@ int ls(const char *path, ulong flags) return errno; while ((d = readdir(dir))) { - sprintf(tmp, "%s/%s", path, d->name); + sprintf(tmp, "%s/%s", path, d->d_name); if (stat(tmp, &s)) goto out; - ls_one(d->name, &s); + ls_one(d->d_name, &s); } closedir(dir); @@ -63,13 +63,13 @@ int ls(const char *path, ulong flags) } while ((d = readdir(dir))) { - sprintf(tmp, "%s/%s", path, d->name); + sprintf(tmp, "%s/%s", path, d->d_name); normalise_path(tmp); if (stat(tmp, &s)) goto out; - if (!strcmp(d->name, ".")) + if (!strcmp(d->d_name, ".")) continue; - if (!strcmp(d->name, "..")) + if (!strcmp(d->d_name, "..")) continue; if (s.st_mode & S_IFDIR) ls(tmp, flags); @@ -115,11 +115,11 @@ static int do_ls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - ls, CONFIG_MAXARGS, 0, do_ls, - "ls - list a file or directory\n", - " list files on path" -); +U_BOOT_CMD_START(ls) + .maxargs = CONFIG_MAXARGS, + .cmd = do_ls, + .usage = "ls - list a file or directory\n", +U_BOOT_CMD_END static int do_cd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -138,11 +138,11 @@ static int do_cd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - cd, 2, 0, do_cd, - "cd - change current directory\n", - " cd to path" -); +U_BOOT_CMD_START(cd) + .maxargs = 2, + .cmd = do_cd, + .usage = "cd - change current directory\n", +U_BOOT_CMD_END static int do_pwd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -150,11 +150,11 @@ static int do_pwd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - pwd, 1, 0, do_pwd, - "pwd - display current directory\n", - NULL; -); +U_BOOT_CMD_START(pwd) + .maxargs = 2, + .cmd = do_pwd, + .usage = "pwd - display current directory\n", +U_BOOT_CMD_END static int do_mkdir (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -169,11 +169,11 @@ static int do_mkdir (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - mkdir, 2, 0, do_mkdir, - "mkdir - create a new directory\n", - "" -); +U_BOOT_CMD_START(mkdir) + .maxargs = 2, + .cmd = do_mkdir, + .usage = "mkdir - create a new directory\n", +U_BOOT_CMD_END static int do_rm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -188,11 +188,11 @@ static int do_rm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - rm, 2, 0, do_rm, - "rm - remove files\n", - "" -); +U_BOOT_CMD_START(rm) + .maxargs = 2, + .cmd = do_rm, + .usage = "rm - remove files\n", +U_BOOT_CMD_END static int do_rmdir (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -207,11 +207,11 @@ static int do_rmdir (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - rmdir, 2, 0, do_rmdir, - "rm - remove files\n", - "" -); +U_BOOT_CMD_START(rmdir) + .maxargs = 2, + .cmd = do_rmdir, + .usage = "rmdir - remove directories\n", +U_BOOT_CMD_END static int do_mount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -243,11 +243,12 @@ static int do_mount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - mount, 4, 0, do_mount, - "mount - mount a filesystem to a device\n", - " add a filesystem of type 'type' on the given device" -); +U_BOOT_CMD_START(mount) + .maxargs = 4, + .cmd = do_mount, + .usage = "mount - mount a filesystem to a device\n", + U_BOOT_CMD_HELP(" add a filesystem of type 'type' on the given device") +U_BOOT_CMD_END static int do_umount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -266,13 +267,11 @@ static int do_umount (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) } -U_BOOT_CMD( - umount, 2, 0, do_umount, - "umount - umount a filesystem\n", - " add a filesystem of type 'type' on the given device" -); - -/* --------- Testing --------- */ +U_BOOT_CMD_START(umount) + .maxargs = 2, + .cmd = do_umount, + .usage = "umount - umount a filesystem mounted on \n", +U_BOOT_CMD_END static int do_cat ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -308,10 +307,8 @@ out: return err; } -U_BOOT_CMD( - cat, 2, 0, do_cat, - "cat - bla bla\n", - " list files on device" -); -/* --------- /Testing --------- */ - +U_BOOT_CMD_START(cat) + .maxargs = 2, + .cmd = do_cat, + .usage = "cat - bla bla\n", +U_BOOT_CMD_END diff --git a/common/cmd_mem.c b/common/cmd_mem.c index 94386c935..beea5b0c9 100644 --- a/common/cmd_mem.c +++ b/common/cmd_mem.c @@ -176,11 +176,12 @@ out: return errno; } -U_BOOT_CMD( - md, CONFIG_MAXARGS, 0, do_mem_md, - "md - memory display\n", - "[.b, .w, .l] address [# of objects]\n - memory display\n" -); +U_BOOT_CMD_START(md) + .maxargs = CONFIG_MAXARGS, + .cmd = do_mem_md, + .usage = "md - memory display\n", + U_BOOT_CMD_HELP("write me\n") +U_BOOT_CMD_END int do_mem_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -264,11 +265,12 @@ out: return errno; } -U_BOOT_CMD( - mw, CONFIG_MAXARGS, 0, do_mem_mw, - "mw - memory write (fill)\n", - "[.b, .w, .l] address value [count]\n - write memory\n" -); +U_BOOT_CMD_START(mw) + .maxargs = CONFIG_MAXARGS, + .cmd = do_mem_mw, + .usage = "mw - memory write (fill)\n", + U_BOOT_CMD_HELP("write me\n") +U_BOOT_CMD_END int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -440,11 +442,12 @@ out: return ret; } -U_BOOT_CMD( - cp, 4, 0, do_cp, - "cp - memory copy\n", - "[.b, .w, .l] source target count\n - copy memory\n" -); +U_BOOT_CMD_START(cp) + .maxargs = CONFIG_MAXARGS, + .cmd = do_cp, + .usage = "cp - copy files\n", + U_BOOT_CMD_HELP("write me\n") +U_BOOT_CMD_END #ifndef CONFIG_CRC32_VERIFY @@ -618,19 +621,21 @@ static int mem_init(void) device_initcall(mem_init); -U_BOOT_CMD( - cmp, 4, 0, do_mem_cmp, - "cmp - memory compare\n", - "[.b, .w, .l] addr1 addr2 count\n - compare memory\n" -); +U_BOOT_CMD_START(cmp) + .maxargs = 4, + .cmd = do_mem_cmp, + .usage = "cmp - memory compare\n", + U_BOOT_CMD_HELP("write me\n") +U_BOOT_CMD_END #ifndef CONFIG_CRC32_VERIFY -U_BOOT_CMD( - crc32, 4, 0, do_mem_crc, - "crc32 - checksum calculation\n", - "address count [addr]\n - compute CRC32 checksum [save at addr]\n" -); +U_BOOT_CMD_START(crc32) + .maxargs = 4, + .cmd = do_mem_crc, + .usage = "crc32 - checksum calculation\n", + U_BOOT_CMD_HELP("address count [addr]\n - compute CRC32 checksum [save at addr]\n") +U_BOOT_CMD_END #else /* CONFIG_CRC32_VERIFY */ diff --git a/common/cmd_misc.c b/common/cmd_misc.c index 7199a1b79..2dc28e92c 100644 --- a/common/cmd_misc.c +++ b/common/cmd_misc.c @@ -51,38 +51,53 @@ int do_sleep (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - sleep , 2, 2, do_sleep, - "sleep - delay execution for some time\n", - "N\n" - " - delay execution for N seconds (N is _decimal_ !!!)\n" -); +U_BOOT_CMD_START(sleep) + .maxargs = 2, + .cmd = do_sleep, + .usage = "sleep - delay execution for n secondsnn", +U_BOOT_CMD_END + #endif -#ifdef CONFIG_CMD_MALLOCINFO -int do_mallocinfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +#ifdef CONFIG_CMD_CLEAR +int do_clear (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + + printf("%c[2J%c[;H", 27, 27); + + return 0; +} + +U_BOOT_CMD_START(clear) + .maxargs = 1, + .cmd = do_clear, + .usage = "clear - clear screen\n", +U_BOOT_CMD_END +#endif + +#ifdef CONFIG_CMD_MEMINFO +int do_meminfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { malloc_stats(); return 0; } -U_BOOT_CMD( - mallocinfo , 1, 2, do_mallocinfo, - "mallocinfo - print info about malloc usage\n", - "N\n" - " - print info about malloc usage\n" -); +U_BOOT_CMD_START(meminfo) + .maxargs = 1, + .cmd = do_meminfo, + .usage = "meminfo - print info about memory usage\n", +U_BOOT_CMD_END #endif /* Implemented in $(CPU)/interrupts.c */ #if (CONFIG_COMMANDS & CFG_CMD_IRQ) int do_irqinfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); -U_BOOT_CMD( - irqinfo, 1, 1, do_irqinfo, - "irqinfo - print information about IRQs\n", - NULL -); +U_BOOT_CMD_START(irqinfo) + .maxargs = 1, + .cmd = do_irqinfo, + .usage = "irqinfo - print information about IRQs\n", +U_BOOT_CMD_END #endif /* CONFIG_COMMANDS & CFG_CMD_IRQ */ diff --git a/common/cmd_net.c b/common/cmd_net.c index 74a3dbdd5..4f7018143 100644 --- a/common/cmd_net.c +++ b/common/cmd_net.c @@ -93,33 +93,36 @@ int do_bootp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return netboot_common (BOOTP, cmdtp, argc, argv); } -U_BOOT_CMD( - bootp, 3, 1, do_bootp, - "bootp\t- boot image via network using BootP/TFTP protocol\n", - "[loadAddress] [bootfilename]\n" -); +U_BOOT_CMD_START(bootp) + .maxargs = 3, + .cmd = do_bootp, + .usage = "bootp\t- boot image via network using BootP/TFTP protocol\n", + U_BOOT_CMD_HELP("[loadAddress] [bootfilename]\n") +U_BOOT_CMD_END int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { return netboot_common (TFTP, cmdtp, argc, argv); } -U_BOOT_CMD( - tftpboot, 3, 1, do_tftpb, - "tftpboot- boot image via network using TFTP protocol\n", - "[loadAddress] [bootfilename]\n" -); +U_BOOT_CMD_START(tftpboot) + .maxargs = 3, + .cmd = do_tftpb, + .usage = "tftpboot- boot image via network using TFTP protocol\n", + U_BOOT_CMD_HELP("[loadAddress] [bootfilename]\n") +U_BOOT_CMD_END int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { return netboot_common (RARP, cmdtp, argc, argv); } -U_BOOT_CMD( - rarpboot, 3, 1, do_rarpb, - "rarpboot- boot image via network using RARP/TFTP protocol\n", - "[loadAddress] [bootfilename]\n" -); +U_BOOT_CMD_START(rarpboot) + .maxargs = 3, + .cmd = do_rarpb, + .usage = "rarpboot- boot image via network using RARP/TFTP protocol\n", + U_BOOT_CMD_HELP("[loadAddress] [bootfilename]\n") +U_BOOT_CMD_END #ifdef CONFIG_NET_DHCP int do_dhcp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) @@ -135,11 +138,12 @@ int do_dhcp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - dhcp, 3, 1, do_dhcp, - "dhcp\t- invoke DHCP client to obtain IP/boot params\n", - "\n" -); +U_BOOT_CMD_START(dhcp) + .maxargs = 3, + .cmd = do_dhcp, + .usage = "dhcp\t- invoke DHCP client to obtain IP/boot params\n", +U_BOOT_CMD_END + #endif /* CONFIG_NET_DHCP */ #ifdef CONFIG_NET_NFS @@ -148,11 +152,13 @@ int do_nfs (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return netboot_common(NFS, cmdtp, argc, argv); } -U_BOOT_CMD( - nfs, 3, 1, do_nfs, - "nfs\t- boot image via network using NFS protocol\n", - "[loadAddress] [host ip addr:bootfilename]\n" -); +U_BOOT_CMD_START(nfs) + .maxargs = 3, + .cmd = do_nfs, + .usage = "nfs\t- boot image via network using NFS protocol\n", + U_BOOT_CMD_HELP("[loadAddress] [host ip addr:bootfilename]\n") +U_BOOT_CMD_END + #endif /* CONFIG_NET_NFS */ int net_store_fd; @@ -229,8 +235,11 @@ int do_cdp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - cdp, 1, 1, do_cdp, - "cdp\t- Perform CDP network configuration\n", -); +U_BOOT_CMD_START(cdp) + .maxargs = 1, + .cmd = do_cdp, + .usage = "cdp\t- Perform CDP network configuration\n", + U_BOOT_CMD_HELP("[loadAddress] [host ip addr:bootfilename]\n") +U_BOOT_CMD_END + #endif /* CFG_CMD_CDP */ diff --git a/common/command.c b/common/command.c index ef0f93a13..12f2715ef 100644 --- a/common/command.c +++ b/common/command.c @@ -39,11 +39,11 @@ do_version (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - version, 1, 1, do_version, - "version - print monitor version\n", - NULL -); +U_BOOT_CMD_START(version) + .maxargs = 1, + .cmd = do_version, + .usage = "version - print monitor version\n", +U_BOOT_CMD_END int do_true (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) @@ -51,11 +51,11 @@ do_true (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - true, 1, 1, do_true, - "true - return 0\n", - NULL -); +U_BOOT_CMD_START(true) + .maxargs = 1, + .cmd = do_true, + .usage = "true - return 0\n", +U_BOOT_CMD_END int do_false (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) @@ -63,11 +63,11 @@ do_false (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 1; } -U_BOOT_CMD( - false, 1, 1, do_false, - "false - return 1\n", - NULL -); +U_BOOT_CMD_START(false) + .maxargs = 1, + .cmd = do_false, + .usage = "false - return 1\n", +U_BOOT_CMD_END #ifdef CONFIG_HUSH_PARSER @@ -92,11 +92,11 @@ do_readline (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - readline, 3, 1, do_readline, - "readline - \n", - NULL -); +U_BOOT_CMD_START(readline) + .maxargs = 3, + .cmd = do_readline, + .usage = "readline - \n", +U_BOOT_CMD_END int do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) @@ -104,6 +104,14 @@ do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) char **ap; int left, adv, expr, last_expr, neg, last_cmp; + if (*argv[0] == '[') { + if (*argv[argc - 1] != ']') { + printf("[: missing `]'\n"); + return 1; + } + argc--; + } + /* args? */ if (argc < 3) return 1; @@ -211,12 +219,17 @@ do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return expr; } -U_BOOT_CMD( - test, CONFIG_MAXARGS, 1, do_test, - "test - minimal test like /bin/sh\n", +char *test_aliases[] = { "[", NULL}; + +U_BOOT_CMD_START(test) + .aliases = test_aliases, + .maxargs = CONFIG_MAXARGS, + .cmd = do_test, + .usage = "test - minimal test like /bin/sh\n", + U_BOOT_CMD_HELP( "[args..]\n" - " - test functionality\n" -); + " - test functionality\n") +U_BOOT_CMD_END int do_exit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) @@ -230,12 +243,11 @@ do_exit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return -r - 2; } -U_BOOT_CMD( - exit, 2, 1, do_exit, - "exit - exit script\n", - " - exit functionality\n" -); - +U_BOOT_CMD_START(exit) + .maxargs = 1, + .cmd = do_exit, + .usage = "exit - exit script\n", +U_BOOT_CMD_END #endif @@ -323,31 +335,20 @@ int do_help (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) return rcode; } +char *help_aliases[] = { "?", NULL}; -U_BOOT_CMD( - help, CONFIG_MAXARGS, 1, do_help, - "help - print online help\n", - "[command ...]\n" +U_BOOT_CMD_START(help) + .maxargs = 2, + .cmd = do_help, + .aliases = help_aliases, + .usage = "help - print online help\n", + U_BOOT_CMD_HELP( " - show help information (for 'command')\n" "'help' prints online help for the monitor commands.\n\n" "Without arguments, it prints a short usage message for all commands.\n\n" "To get detailed help information for specific commands you can type\n" - "'help' with one or more command names as arguments.\n" -); - -/* This do not ust the U_BOOT_CMD macro as ? can't be used in symbol names */ -#ifdef CONFIG_LONGHELP -cmd_tbl_t __u_boot_cmd_question_mark Struct_Section = { - "?", CONFIG_MAXARGS, 1, do_help, - "? - alias for 'help'\n", - NULL -}; -#else -cmd_tbl_t __u_boot_cmd_question_mark Struct_Section = { - "?", CONFIG_MAXARGS, 1, do_help, - "? - alias for 'help'\n" -}; -#endif /* CONFIG_LONGHELP */ + "'help' with one or more command names as arguments.\n") +U_BOOT_CMD_END #endif /* CONFIG_CMD_HELP */ @@ -358,15 +359,10 @@ cmd_tbl_t *find_cmd (const char *cmd) { cmd_tbl_t *cmdtp; cmd_tbl_t *cmdtp_temp = &__u_boot_cmd_start; /*Init value */ - const char *p; int len; int n_found = 0; - /* - * Some commands allow length modifiers (like "cp.b"); - * compare command name only until first dot. - */ - len = ((p = strchr(cmd, '.')) == NULL) ? strlen (cmd) : (p - cmd); + len = strlen (cmd); for (cmdtp = &__u_boot_cmd_start; cmdtp != &__u_boot_cmd_end; @@ -378,6 +374,19 @@ cmd_tbl_t *find_cmd (const char *cmd) cmdtp_temp = cmdtp; /* abbreviated command ? */ n_found++; } + if (cmdtp->aliases) { + char **aliases = cmdtp->aliases; + while(*aliases) { + if (strncmp (cmd, *aliases, len) == 0) { + if (len == strlen (cmdtp->name)) + return cmdtp; /* full match */ + + cmdtp_temp = cmdtp; /* abbreviated command ? */ + n_found++; + } + aliases++; + } + } } if (n_found == 1) { /* exactly one match */ return cmdtp_temp; diff --git a/common/dlmalloc.c b/common/dlmalloc.c index 22ef06d77..03dfcb421 100644 --- a/common/dlmalloc.c +++ b/common/dlmalloc.c @@ -1933,7 +1933,7 @@ size_t malloc_usable_size(mem) Void_t* mem; /* Utility to update current_mallinfo for malloc_stats and mallinfo() */ -#ifdef CONFIG_CMD_MALLOCINFO +#ifdef CONFIG_CMD_MEMINFO static void malloc_update_mallinfo() { int i; @@ -2011,7 +2011,7 @@ void malloc_stats() #endif } -#endif /* CONFIG_CMD_MALLOCINFO */ +#endif /* CONFIG_CMD_MEMINFO */ diff --git a/common/env.c b/common/env.c index 5d9f8ffef..7d5a02162 100644 --- a/common/env.c +++ b/common/env.c @@ -126,13 +126,15 @@ int do_printenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - printenv, CONFIG_MAXARGS, 1, do_printenv, - "printenv- print environment variables\n", +U_BOOT_CMD_START(printenv) + .maxargs = CONFIG_MAXARGS, + .cmd = do_printenv, + .usage = "printenv- print environment variables\n", + U_BOOT_CMD_HELP( "\n - print values of all environment variables\n" "printenv name ...\n" - " - print value of environment variable 'name'\n" -); + " - print value of environment variable 'name'\n") +U_BOOT_CMD_END #ifdef CONFIG_SIMPLE_PARSER int do_setenv ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) @@ -147,13 +149,16 @@ int do_setenv ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - setenv, CONFIG_MAXARGS, 0, do_setenv, - "setenv - set environment variables\n", +U_BOOT_CMD_START(setenv) + .maxargs = CONFIG_MAXARGS, + .cmd = do_setenv, + .usage = "setenv - set environment variables\n", + U_BOOT_CMD_HELP( "name value ...\n" " - set environment variable 'name' to 'value ...'\n" "setenv name\n" " - delete environment variable 'name'\n" -); +U_BOOT_CMD_END + #endif diff --git a/common/mtdpart.c b/common/mtdpart.c index 14bd1e5ae..2be8c96a7 100644 --- a/common/mtdpart.c +++ b/common/mtdpart.c @@ -161,17 +161,17 @@ int do_delpart ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - addpart, 2, 0, do_addpart, - "addpart - add a partition table to a device\n", - "" -); +U_BOOT_CMD_START(addpart) + .maxargs = 2, + .cmd = do_addpart, + .usage = "addpart - add a partition table to a device\n", +U_BOOT_CMD_END -U_BOOT_CMD( - delpart, 2, 0, do_delpart, - "delpart - delete a partition table from a device\n", - "" -); +U_BOOT_CMD_START(delpart) + .maxargs = 2, + .cmd = do_delpart, + .usage = "delpart - delete a partition table from a device\n", +U_BOOT_CMD_END int part_probe (struct device_d *dev) { diff --git a/common/startup.c b/common/startup.c index ac975eca0..7a1fe9ed1 100644 --- a/common/startup.c +++ b/common/startup.c @@ -45,6 +45,8 @@ #include #include #include +#include +#include ulong load_addr = 0; /* Default Load Address */ @@ -108,6 +110,7 @@ void start_uboot (void) { initcall_t *initcall; int result; + struct stat s; /* compiler optimization barrier needed for GCC >= 3.4 */ // __asm__ __volatile__("": : :"memory"); @@ -130,12 +133,18 @@ void start_uboot (void) run_command("mkdir /dev", 0); run_command("mkdir /env", 0); run_command("mount none devfs /dev", 0); + run_command("loadenv", 0); - run_command("eth0.ip=172.0.0.2", 0); - run_command("eth0.mac=80:81:82:83:84:85", 0); - run_command("eth0.serverip=172.0.0.1", 0); - run_command("eth0.gateway=172.0.0.1", 0); - run_command("eth0.netmask=255.255.255.0", 0); + if (!stat("/env/init", &s)) { + printf("running /env/init\n"); + run_command("exec /env/init", 0); + } + +// run_command("eth0.ip=172.0.0.2", 0); +// run_command("eth0.mac=80:81:82:83:84:85", 0); +// run_command("eth0.serverip=172.0.0.1", 0); +// run_command("eth0.gateway=172.0.0.1", 0); +// run_command("eth0.netmask=255.255.255.0", 0); /* main_loop() can return to retry autoboot, if so just run it again. */ for (;;) { diff --git a/fs/cramfs/cramfs.c b/fs/cramfs/cramfs.c index b66c700bd..b37dd9842 100644 --- a/fs/cramfs/cramfs.c +++ b/fs/cramfs/cramfs.c @@ -183,7 +183,7 @@ static int cramfs_fill_dirent (struct device_d *dev, unsigned long offset, struc if (!inode) return -EINVAL; - memset(d->name, 0, 256); + memset(d->d_name, 0, 256); /* * Namelengths on disk are shifted by two @@ -192,7 +192,7 @@ static int cramfs_fill_dirent (struct device_d *dev, unsigned long offset, struc */ namelen = CRAMFS_GET_NAMELEN (inode) << 2; - dev_read(dev, d->name, namelen, offset + sizeof(struct cramfs_inode), 0); + dev_read(dev, d->d_name, namelen, offset + sizeof(struct cramfs_inode), 0); free(inode); return namelen; } @@ -200,10 +200,10 @@ static int cramfs_fill_dirent (struct device_d *dev, unsigned long offset, struc struct cramfs_dir { unsigned long offset, size; unsigned long inodeoffset; - struct dir dir; + DIR dir; }; -struct dir* cramfs_opendir(struct device_d *_dev, const char *filename) +DIR* cramfs_opendir(struct device_d *_dev, const char *filename) { char *f; struct cramfs_priv *priv = _dev->priv; @@ -249,7 +249,7 @@ err_free: return NULL; } -static struct dirent* cramfs_readdir(struct device_d *_dev, struct dir *_dir) +static struct dirent* cramfs_readdir(struct device_d *_dev, DIR *_dir) { struct fs_device_d *fsdev = _dev->type_data; struct device_d *dev = fsdev->parent; @@ -266,7 +266,7 @@ static struct dirent* cramfs_readdir(struct device_d *_dev, struct dir *_dir) return NULL; } -static int cramfs_closedir(struct device_d *dev, struct dir *_dir) +static int cramfs_closedir(struct device_d *dev, DIR *_dir) { struct cramfs_dir *dir = _dir->priv; free(dir); diff --git a/fs/devfs.c b/fs/devfs.c index 3716aaeb2..651066414 100644 --- a/fs/devfs.c +++ b/fs/devfs.c @@ -36,11 +36,11 @@ static int devfs_close(struct device_d *dev, FILE *f) return 0; } -struct dir* devfs_opendir(struct device_d *dev, const char *pathname) +DIR* devfs_opendir(struct device_d *dev, const char *pathname) { - struct dir *dir; + DIR *dir; - dir = malloc(sizeof(struct dir)); + dir = malloc(sizeof(DIR)); if (!dir) return NULL; @@ -49,7 +49,7 @@ struct dir* devfs_opendir(struct device_d *dev, const char *pathname) return dir; } -struct dirent* devfs_readdir(struct device_d *_dev, struct dir *dir) +struct dirent* devfs_readdir(struct device_d *_dev, DIR *dir) { struct device_d *dev = dir->priv; @@ -57,14 +57,14 @@ struct dirent* devfs_readdir(struct device_d *_dev, struct dir *dir) dev = dev->next; if (dev) { - strcpy(dir->d.name, dev->id); + strcpy(dir->d.d_name, dev->id); dir->priv = dev->next; return &dir->d; } return NULL; } -int devfs_closedir(struct device_d *dev, struct dir *dir) +int devfs_closedir(struct device_d *dev, DIR *dir) { free(dir); return 0; diff --git a/fs/fs.c b/fs/fs.c index 0dd2f0749..1d56c863f 100644 --- a/fs/fs.c +++ b/fs/fs.c @@ -188,7 +188,7 @@ static struct device_d *get_device_by_path(char **path) int dir_is_empty(const char *pathname) { - struct dir *dir; + DIR *dir; struct dirent *d; int ret = 1; @@ -199,7 +199,7 @@ int dir_is_empty(const char *pathname) } while ((d = readdir(dir))) { - if (!strcmp(d->name, ".") || !strcmp(d->name, "..")) + if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, "..")) continue; ret = 0; break; @@ -575,9 +575,9 @@ int umount(const char *pathname) return 0; } -struct dir *opendir(const char *pathname) +DIR *opendir(const char *pathname) { - struct dir *dir = NULL; + DIR *dir = NULL; struct device_d *dev; struct fs_driver_d *fsdrv; char *p = normalise_path(pathname); @@ -604,12 +604,12 @@ out: return dir; } -struct dirent *readdir(struct dir *dir) +struct dirent *readdir(DIR *dir) { return dir->fsdrv->readdir(dir->dev, dir); } -int closedir(struct dir *dir) +int closedir(DIR *dir) { return dir->fsdrv->closedir(dir->dev, dir); } diff --git a/fs/ramfs.c b/fs/ramfs.c index 5047d7c39..d0b60bd20 100644 --- a/fs/ramfs.c +++ b/fs/ramfs.c @@ -426,9 +426,9 @@ int ramfs_truncate(struct device_d *dev, FILE *f, ulong size) return 0; } -struct dir* ramfs_opendir(struct device_d *dev, const char *pathname) +DIR* ramfs_opendir(struct device_d *dev, const char *pathname) { - struct dir *dir; + DIR *dir; struct ramfs_priv *priv = dev->priv; struct ramfs_inode *node; // printf("opendir: %s\n", pathname); @@ -441,26 +441,26 @@ struct dir* ramfs_opendir(struct device_d *dev, const char *pathname) if (node->mode != S_IFDIR) return NULL; - dir = xmalloc(sizeof(struct dir)); + dir = xmalloc(sizeof(DIR)); dir->priv = node->child; return dir; } -struct dirent* ramfs_readdir(struct device_d *dev, struct dir *dir) +struct dirent* ramfs_readdir(struct device_d *dev, DIR *dir) { struct ramfs_inode *node = dir->priv; if (node) { - strcpy(dir->d.name, node->name); + strcpy(dir->d.d_name, node->name); dir->priv = node->next; return &dir->d; } return NULL; } -int ramfs_closedir(struct device_d *dev, struct dir *dir) +int ramfs_closedir(struct device_d *dev, DIR *dir) { free(dir); return 0; diff --git a/include/command.h b/include/command.h index dcde4de81..5482e06e2 100644 --- a/include/command.h +++ b/include/command.h @@ -38,8 +38,8 @@ struct cmd_tbl_s { char *name; /* Command Name */ + char **aliases; int maxargs; /* maximum number of arguments */ - int repeatable; /* autorepeat allowed? */ /* Implementation function */ int (*cmd)(struct cmd_tbl_s *, int, int, char *[]); char *usage; /* Usage message (short) */ @@ -92,16 +92,18 @@ typedef void command_t (cmd_tbl_t *, int, int, char *[]); #define Struct_Section __attribute__ ((unused,section (".u_boot_cmd"))) -#ifdef CONFIG_LONGHELP +#define U_BOOT_CMD_START(_name) \ +const cmd_tbl_t __u_boot_cmd_##_name \ + Struct_Section = { \ + .name = #_name, -#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \ -cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help} +#define U_BOOT_CMD_END \ +}; -#else /* no long help info */ - -#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \ -cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage} - -#endif /* CONFIG_LONGHELP */ +#ifdef CONFIG_LONGHELP +#define U_BOOT_CMD_HELP(text) .help = text, +#else +#define U_BOOT_CMD_HELP(text) +#endif #endif /* __COMMAND_H */ diff --git a/include/fs.h b/include/fs.h index d2bc1581c..d0a47163e 100644 --- a/include/fs.h +++ b/include/fs.h @@ -14,16 +14,16 @@ struct node_d; struct stat; struct dirent { - char name[256]; + char d_name[256]; }; -struct dir { +typedef struct dir { struct device_d *dev; struct fs_driver_d *fsdrv; struct node_d *node; struct dirent d; void *priv; /* private data for the fs driver */ -}; +} DIR; typedef struct filep { struct device_d *dev; /* The device this FILE belongs to */ @@ -61,7 +61,7 @@ struct fs_driver_d { struct dir* (*opendir)(struct device_d *dev, const char *pathname); struct dirent* (*readdir)(struct device_d *dev, struct dir *dir); - int (*closedir)(struct device_d *dev, struct dir *dir); + int (*closedir)(struct device_d *dev, DIR *dir); int (*stat)(struct device_d *dev, const char *file, struct stat *stat); struct driver_d drv; @@ -98,9 +98,9 @@ int umount(const char *pathname); const char *getcwd(void); int chdir(const char *pathname); -struct dir *opendir(const char *pathname); -struct dirent *readdir(struct dir *dir); -int closedir(struct dir *dir); +DIR *opendir(const char *pathname); +struct dirent *readdir(DIR *dir); +int closedir(DIR *dir); char *mkmodestr(unsigned long mode, char *str); diff --git a/lib_generic/misc.c b/lib_generic/misc.c index e0568739f..109ec31cb 100644 --- a/lib_generic/misc.c +++ b/lib_generic/misc.c @@ -521,10 +521,8 @@ int do_devinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - devinfo, 2, 0, do_devinfo, - "devinfo - display info about devices and drivers\n", - "" -); - - +U_BOOT_CMD_START(devinfo) + .maxargs = 2, + .cmd = do_devinfo, + .usage = "devinfo - display info about devices and drivers\n", +U_BOOT_CMD_END diff --git a/net/ping.c b/net/ping.c index 0957df28d..95dd5d3b1 100644 --- a/net/ping.c +++ b/net/ping.c @@ -109,8 +109,8 @@ int do_ping (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -U_BOOT_CMD( - ping, 2, 1, do_ping, - "ping\t- send ICMP ECHO_REQUEST to network host\n", - "pingAddress\n" -); +U_BOOT_CMD_START(ping) + .maxargs = 2, + .cmd = do_ping, + .usage = "ping\t- send ICMP ECHO_REQUEST to network host\n", +U_BOOT_CMD_END