diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-06-14 06:59:01 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-06-14 06:59:01 -0700 |
| commit | 268a1fd289f3630cc49d0c6bf68cb4d33243e24d (patch) | |
| tree | a36f0caf6801f4c3be0b2555e384e723d913a08b | |
| parent | 7cbe8cf7ac4380780da88aa33770e794a352e671 (diff) | |
| parent | 03d32796b44420fa07ac375a2e4768a5c5195235 (diff) | |
| download | mruby-268a1fd289f3630cc49d0c6bf68cb4d33243e24d.tar.gz mruby-268a1fd289f3630cc49d0c6bf68cb4d33243e24d.zip | |
Merge pull request #273 from nurse/support-e-option-without-space
Support mruby -e'p 1'.
| -rw-r--r-- | tools/mruby/mruby.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index 0e38879db..5cf3d8a37 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -51,12 +51,14 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) memset(args, 0, sizeof(*args)); for (argc--,argv++; argc > 0; argc--,argv++) { + char *item; if (argv[0][0] != '-') break; if (strlen(*argv) <= 1) return -1; - switch ((*argv)[1]) { + item = argv[0] + 1; + switch (*item++) { case 'b': args->mrbfile = 1; break; @@ -64,19 +66,24 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) args->check_syntax = 1; break; case 'e': - if (argc > 1) { + if (item[0]) { + goto append_cmdline; + } + else if (argc > 1) { argc--; argv++; + item = argv[0]; +append_cmdline: if (!args->cmdline) { char *buf; - buf = mrb_malloc(mrb, strlen(argv[0])+1); - strcpy(buf, argv[0]); + buf = mrb_malloc(mrb, strlen(item)+1); + strcpy(buf, item); args->cmdline = buf; } else { - args->cmdline = mrb_realloc(mrb, args->cmdline, strlen(args->cmdline)+strlen(argv[0])+2); + args->cmdline = mrb_realloc(mrb, args->cmdline, strlen(args->cmdline)+strlen(item)+2); strcat(args->cmdline, "\n"); - strcat(args->cmdline, argv[0]); + strcat(args->cmdline, item); } } else { |
