stubdom: support quotes in argument passing
PATCH 1/1 stubdom: support quotes in argument passing
stubdom: support quotes in argument passing
Signed-off-by Samuel Thibault <[email protected]>
extras/mini-os/main.c +28 -7
@@ -42,7 +42,7 @@ extern char __app_bss_start, __app_bss_eextern char __app_bss_start, __app_bss_end;static void call_main (void *p) { -char *c; +char *c, quote;#ifdef CONFIG_QEMU char *domargs, *msg;#endif
@@ -101,32 +101,53 @@ static void call_main(void *p) argc =1 ; -#define PARSE_ARGS (ARGS ,START ,END ) \ +#define PARSE_ARGS (ARGS ,START ,QUOTE ,END ) \ c = ARGS; \ + quote = 0; \ while (*c) { \ if (*c != ' ') { \ START; \ - while (*c && *c != ' ') \ + while (*c) { \ + if (quote) { \ + if (*c == quote) { \ + quote = 0; \ + QUOTE; \ + continue; \ + } \ + } else if (*c == ' ') \ + break; \ + if (*c == '"' || *c == '\'') { \ + quote = *c; \ + QUOTE; \ + continue; \ + } \ c++; \ + } \ } else { \ END; \ while (*c == ' ') \ c++; \ } \ + } \ + if (quote) {\ + printk("Warning: unterminated quotation %c\n", quote); \ + quote = 0; \ } +#define PARSE_ARGS_COUNT (ARGS ) PARSE_ARGS(ARGS, argc++, c++, ) +#define PARSE_ARGS_STORE (ARGS ) PARSE_ARGS(ARGS, argv[argc++] = c, memmove(c, c + 1, strlen(c + 1) + 1), *c++ = 0) - PARSE_ARGS((char*)start_info.cmd_line, argc++, ); +PARSE_ARGS_COUNT ((char *)start_info.cmd_line);#ifdef CONFIG_QEMU - PARSE_ARGS(domargs, argc++, ); +PARSE_ARGS_COUNT (domargs);#endif argv =alloca ((argc +1 ) *sizeof (char *)); argv[0 ] ="main" ; argc =1 ; - PARSE_ARGS((char*)start_info.cmd_line, argv[argc++] = c, *c++ = 0) + PARSE_ARGS_STORE((char*)start_info.cmd_line)#ifdef CONFIG_QEMU - PARSE_ARGS(domargs, argv[argc++] = c, *c++ = 0) + PARSE_ARGS_STORE(domargs)#endif argv[argc] =NULL ;