Merge branch 'master' of ssh://gemini/home/wd/git/u-boot/master
[platform/kernel/u-boot.git] / common / cmd_strings.c
1 /*
2  * cmd_strings.c - just like `strings` command
3  *
4  * Copyright (c) 2008 Analog Devices Inc.
5  *
6  * Licensed under the GPL-2 or later.
7  */
8
9 #include <config.h>
10 #include <common.h>
11 #include <command.h>
12
13 static char *start_addr, *last_addr;
14
15 int do_strings(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
16 {
17         if (argc == 1) {
18                 cmd_usage(cmdtp);
19                 return 1;
20         }
21
22         if ((flag & CMD_FLAG_REPEAT) == 0) {
23                 start_addr = (char *)simple_strtoul(argv[1], NULL, 16);
24                 if (argc > 2)
25                         last_addr = (char *)simple_strtoul(argv[2], NULL, 16);
26                 else
27                         last_addr = (char *)-1;
28         }
29
30         char *addr = start_addr;
31         do {
32                 puts(addr);
33                 puts("\n");
34                 addr += strlen(addr) + 1;
35         } while (addr[0] && addr < last_addr);
36
37         last_addr = addr + (last_addr - start_addr);
38         start_addr = addr;
39
40         return 0;
41 }
42
43 U_BOOT_CMD(strings, 3, 1, do_strings,
44         "display strings",
45         "<addr> [byte count]\n"
46         "    - display strings at <addr> for at least [byte count] or first double NUL\n");