summaryrefslogtreecommitdiffstats
path: root/common/cmd_mem.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:01:50 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:01:50 +0200
commitd402b885cee55236019dc17fd533cc5380726abf (patch)
tree71418573198b40a0624fcc6608024a1131c75b92 /common/cmd_mem.c
parent5b4110a39c1810e16bffe647c86709bd3b28c7fc (diff)
downloadbarebox-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.c60
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;