summaryrefslogtreecommitdiffstats
path: root/commands/mem.c
diff options
context:
space:
mode:
authorAntony Pavlov <antonynpavlov@gmail.com>2012-11-26 13:51:40 +0400
committerSascha Hauer <s.hauer@pengutronix.de>2012-11-26 11:14:40 +0100
commit6552d2991ff5fb0d6632ab5dd91ac44be39d6992 (patch)
tree5b99cde9b619336e7f59894a85bb8329b6b95b7f /commands/mem.c
parentf23198905c4e943a019acc0a7210d4e586650425 (diff)
downloadbarebox-6552d2991ff5fb0d6632ab5dd91ac44be39d6992.tar.gz
barebox-6552d2991ff5fb0d6632ab5dd91ac44be39d6992.tar.xz
commands: md: add the '-x' option (swap bytes)
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'commands/mem.c')
-rw-r--r--commands/mem.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/commands/mem.c b/commands/mem.c
index a42b7bacb3..9873e52832 100644
--- a/commands/mem.c
+++ b/commands/mem.c
@@ -136,7 +136,7 @@ static int open_and_lseek(const char *filename, int mode, loff_t pos)
}
static int mem_parse_options(int argc, char *argv[], char *optstr, int *mode,
- char **sourcefile, char **destfile)
+ char **sourcefile, char **destfile, int *swab)
{
int opt;
@@ -157,6 +157,9 @@ static int mem_parse_options(int argc, char *argv[], char *optstr, int *mode,
case 'd':
*destfile = optarg;
break;
+ case 'x':
+ *swab = 1;
+ break;
default:
return -1;
}
@@ -173,11 +176,13 @@ static int do_mem_md(int argc, char *argv[])
int fd;
char *filename = DEVMEM;
int mode = O_RWSIZE_4;
+ int swab = 0;
if (argc < 2)
return COMMAND_ERROR_USAGE;
- if (mem_parse_options(argc, argv, "bwls:", &mode, &filename, NULL) < 0)
+ if (mem_parse_options(argc, argv, "bwls:x", &mode, &filename, NULL,
+ &swab) < 0)
return 1;
if (optind < argc) {
@@ -204,7 +209,7 @@ static int do_mem_md(int argc, char *argv[])
goto out;
if ((ret = memory_display(rw_buf, start, r,
- mode >> O_RWSIZE_SHIFT, 0)))
+ mode >> O_RWSIZE_SHIFT, swab)))
goto out;
start += r;
@@ -225,6 +230,7 @@ static const __maybe_unused char cmd_md_help[] =
" -b output in bytes\n"
" -w output in halfwords (16bit)\n"
" -l output in words (32bit)\n"
+" -x swap bytes at output\n"
"\n"
"Memory regions:\n"
"Memory regions can be specified in two different forms: start+size\n"
@@ -250,7 +256,8 @@ static int do_mem_mw(int argc, char *argv[])
int mode = O_RWSIZE_4;
loff_t adr;
- if (mem_parse_options(argc, argv, "bwld:", &mode, NULL, &filename) < 0)
+ if (mem_parse_options(argc, argv, "bwld:", &mode, NULL, &filename,
+ NULL) < 0)
return 1;
if (optind + 1 >= argc)
@@ -318,7 +325,8 @@ static int do_mem_cmp(int argc, char *argv[])
int offset = 0;
struct stat statbuf;
- if (mem_parse_options(argc, argv, "bwls:d:", &mode, &sourcefile, &destfile) < 0)
+ if (mem_parse_options(argc, argv, "bwls:d:", &mode, &sourcefile,
+ &destfile, NULL) < 0)
return 1;
if (optind + 2 > argc)
@@ -425,7 +433,8 @@ static int do_mem_cp(int argc, char *argv[])
struct stat statbuf;
int ret = 0;
- if (mem_parse_options(argc, argv, "bwls:d:", &mode, &sourcefile, &destfile) < 0)
+ if (mem_parse_options(argc, argv, "bwls:d:", &mode, &sourcefile,
+ &destfile, NULL) < 0)
return 1;
if (optind + 2 > argc)
@@ -530,7 +539,8 @@ static int do_memset(int argc, char *argv[])
int ret = 1;
char *file = DEVMEM;
- if (mem_parse_options(argc, argv, "bwld:", &mode, NULL, &file) < 0)
+ if (mem_parse_options(argc, argv, "bwld:", &mode, NULL, &file,
+ NULL) < 0)
return 1;
if (optind + 3 > argc)