diff options
author | Alexander Aring <alex.aring@googlemail.com> | 2012-09-03 08:18:08 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-09-03 11:09:09 +0200 |
commit | 3e63938ecd2f48520a28e2fed937e87528ad6373 (patch) | |
tree | 8c3375369edd543c07f7e0290c632c1078e28776 /arch/sandbox/os/common.c | |
parent | f047101439d6b9638881daada60a0a78c97082e1 (diff) | |
download | barebox-3e63938ecd2f48520a28e2fed937e87528ad6373.tar.gz barebox-3e63938ecd2f48520a28e2fed937e87528ad6373.tar.xz |
sandbox: fix malloc argument
Fix malloc argument for sandbox system.
Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/sandbox/os/common.c')
-rw-r--r-- | arch/sandbox/os/common.c | 87 |
1 files changed, 57 insertions, 30 deletions
diff --git a/arch/sandbox/os/common.c b/arch/sandbox/os/common.c index 92b7dbb2c7..e296574c93 100644 --- a/arch/sandbox/os/common.c +++ b/arch/sandbox/os/common.c @@ -271,33 +271,29 @@ err_out: static void print_usage(const char*); +static struct option long_options[] = { + {"help", 0, 0, 'h'}, + {"malloc", 1, 0, 'm'}, + {"image", 1, 0, 'i'}, + {"env", 1, 0, 'e'}, + {"stdout", 1, 0, 'O'}, + {"stdin", 1, 0, 'I'}, + {0, 0, 0, 0}, +}; + +static const char optstring[] = "hm:i:e:O:I:"; + int main(int argc, char *argv[]) { void *ram; int opt, ret, fd; int malloc_size = 8 * 1024 * 1024; char str[6]; - int fdno = 0, envno = 0; - - ram = malloc(malloc_size); - if (!ram) { - printf("unable to get malloc space\n"); - exit(1); - } - mem_malloc_init(ram, ram + malloc_size - 1); + int fdno = 0, envno = 0, option_index = 0; while (1) { - int option_index = 0; - static struct option long_options[] = { - {"help", 0, 0, 'h'}, - {"image", 1, 0, 'i'}, - {"env", 1, 0, 'e'}, - {"stdout", 1, 0, 'O'}, - {"stdin", 1, 0, 'I'}, - {0, 0, 0, 0}, - }; - - opt = getopt_long(argc, argv, "hi:e:O:I:", + option_index = 0; + opt = getopt_long(argc, argv, optstring, long_options, &option_index); if (opt == -1) @@ -307,18 +303,7 @@ int main(int argc, char *argv[]) case 'h': print_usage(basename(argv[0])); exit(0); - case 'i': - sprintf(str, "fd%d", fdno); - ret = add_image(optarg, str); - if (ret) - exit(1); - fdno++; - break; case 'm': - /* This option is broken. add_image needs malloc, so - * mem_alloc_init() has to be called before option - * parsing - */ malloc_size = strtoul(optarg, NULL, 0); break; case 'e': @@ -351,6 +336,47 @@ int main(int argc, char *argv[]) } } + ram = malloc(malloc_size); + if (!ram) { + printf("unable to get malloc space\n"); + exit(1); + } + mem_malloc_init(ram, ram + malloc_size - 1); + + /* reset getopt */ + optind = 1; + + while (1) { + option_index = 0; + opt = getopt_long(argc, argv, optstring, + long_options, &option_index); + + if (opt == -1) + break; + + switch (opt) { + case 'h': + break; + case 'm': + break; + case 'i': + sprintf(str, "fd%d", fdno); + ret = add_image(optarg, str); + if (ret) + exit(1); + fdno++; + break; + case 'e': + break; + case 'O': + break; + case 'I': + break; + default: + exit(1); + } + } + barebox_register_console("console", fileno(stdin), fileno(stdout)); rawmode(); @@ -371,6 +397,7 @@ static void print_usage(const char *prgname) "Usage: %s [OPTIONS]\n" "Start barebox.\n\n" "Options:\n\n" +" -m, " " -i, --image=<file> Map an image file to barebox. This option can be given\n" " multiple times. The files will show up as\n" " /dev/fd0 ... /dev/fdx under barebox.\n" |