diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2007-07-05 18:01:50 +0200 |
---|---|---|
committer | Sascha Hauer <sha@octopus.labnet.pengutronix.de> | 2007-07-05 18:01:50 +0200 |
commit | d402b885cee55236019dc17fd533cc5380726abf (patch) | |
tree | 71418573198b40a0624fcc6608024a1131c75b92 /common/cmd_mem.c | |
parent | 5b4110a39c1810e16bffe647c86709bd3b28c7fc (diff) | |
download | barebox-d402b885cee55236019dc17fd533cc5380726abf.tar.gz barebox-d402b885cee55236019dc17fd533cc5380726abf.tar.xz |
svn_rev_397
add -f option for file selection in mm/mw
Diffstat (limited to 'common/cmd_mem.c')
-rw-r--r-- | common/cmd_mem.c | 60 |
1 files changed, 23 insertions, 37 deletions
diff --git a/common/cmd_mem.c b/common/cmd_mem.c index 7ed8170a32..94386c935d 100644 --- a/common/cmd_mem.c +++ b/common/cmd_mem.c @@ -109,16 +109,15 @@ static int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) int r, now; int ret = 0; int fd; - char *filename; + char *filename = "/dev/mem"; int mode = O_RWSIZE_4; int opt; - char *spec; errno = 0; getopt_reset(); - while((opt = getopt(argc, argv, "bwl")) > 0) { + while((opt = getopt(argc, argv, "bwlf:")) > 0) { switch(opt) { case 'b': mode = O_RWSIZE_1; @@ -128,21 +127,19 @@ static int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) break; case 'l': mode = O_RWSIZE_4; + break; + case 'f': + filename = optarg; + break; + default: + return 1; } } - if (optind + 1 != argc) { - printf ("Usage:\n%s\n", cmdtp->usage); - return 1; - } - - if ((spec = strchr(argv[optind], ':'))) { - *spec = 0; - filename = argv[optind]; - spec++; - } else { - spec = argv[optind]; - filename = "/dev/mem"; + if (optind < argc) { + parse_area_spec(argv[optind], &start, &size); + if (size == ~0) + size = 0x100; } fd = open(filename, mode | O_RDONLY); @@ -151,12 +148,6 @@ static int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 1; } - if (*spec) { - parse_area_spec(spec, &start, &size); - if (size == ~0) - size = 0x100; - } - if (lseek(fd, start, SEEK_SET)) { perror("lseek"); goto out; @@ -195,17 +186,16 @@ int do_mem_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { int ret = 0; int fd; - char *filename; + char *filename = "/dev/mem"; int mode = O_RWSIZE_4; int opt; - char *spec; ulong adr; errno = 0; getopt_reset(); - while((opt = getopt(argc, argv, "bwl")) > 0) { + while((opt = getopt(argc, argv, "bwlf:")) > 0) { switch(opt) { case 'b': mode = O_RWSIZE_1; @@ -215,32 +205,28 @@ int do_mem_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) break; case 'l': mode = O_RWSIZE_4; + break; + case 'f': + filename = optarg; + break; + default: + return 1; } } - if (optind + 2 >= argc) { + if (optind + 1 >= argc) { printf ("Usage:\n%s\n", cmdtp->usage); return 1; } - if ((spec = strchr(argv[optind], ':'))) { - *spec = 0; - filename = argv[optind]; - spec++; - adr = strtoul_suffix(spec, NULL, 0); - } else { - adr = strtoul_suffix(argv[optind], NULL, 0); - filename = "/dev/mem"; - } - - optind++; - fd = open(filename, mode | O_WRONLY); if (fd < 0) { perror("open"); return 1; } + adr = strtoul_suffix(argv[optind++], NULL, 0); + if (lseek(fd, adr, SEEK_SET)) { perror("lseek"); goto out; |