summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-04-27 18:31:02 +0900
committerYukihiro Matsumoto <[email protected]>2012-04-27 18:31:02 +0900
commitc8f8f8396ce98b37de5e160655bc6219c13d8248 (patch)
treedffcdb59c491fbfdb022ab71b99f6bd6f95918ef
parentb9a806f757f5444ff356ecc0789e67b62093adab (diff)
downloadmruby-c8f8f8396ce98b37de5e160655bc6219c13d8248.tar.gz
mruby-c8f8f8396ce98b37de5e160655bc6219c13d8248.zip
initialize ARGV when program is specified by -e
-rw-r--r--tools/mruby/mruby.c119
1 files changed, 57 insertions, 62 deletions
diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c
index e0b8260d6..ef513312b 100644
--- a/tools/mruby/mruby.c
+++ b/tools/mruby/mruby.c
@@ -47,76 +47,72 @@ static int
parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
{
char **origargv = argv;
- int nomore_flags = 0;
memset(args, 0, sizeof(*args));
for (argc--,argv++; argc > 0; argc--,argv++) {
- if (!nomore_flags && **argv == '-') {
- if (strlen(*argv) <= 1)
- return -1;
-
- switch ((*argv)[1]) {
- case 'b':
- args->mrbfile = 1;
- break;
- case 'c':
- args->check_syntax = 1;
- break;
- case 'e':
- if (argc > 1) {
- argc--; argv++;
- if (!args->cmdline) {
- char *buf;
-
- buf = mrb_malloc(mrb, strlen(argv[0])+1);
- strcpy(buf, argv[0]);
- args->cmdline = buf;
- }
- else {
- args->cmdline = mrb_realloc(mrb, args->cmdline, strlen(args->cmdline)+strlen(argv[0])+2);
- strcat(args->cmdline, "\n");
- strcat(args->cmdline, argv[0]);
- }
- }
- else {
- printf("%s: No code specified for -e\n", *origargv);
- return 0;
- }
- break;
- case 'v':
- ruby_show_version(mrb);
- args->verbose = 1;
- break;
- case '-':
- if (strcmp((*argv) + 2, "version") == 0) {
- ruby_show_version(mrb);
- }
- else if (strcmp((*argv) + 2, "verbose") == 0) {
- args->verbose = 1;
- break;
- }
- else if (strcmp((*argv) + 2, "copyright") == 0) {
- ruby_show_copyright(mrb);
- }
- else return -3;
- return 0;
+ if (argv[0][0] != '-') break;
+
+ if (strlen(*argv) <= 1)
+ return -1;
+
+ switch ((*argv)[1]) {
+ case 'b':
+ args->mrbfile = 1;
+ break;
+ case 'c':
+ args->check_syntax = 1;
+ break;
+ case 'e':
+ if (argc > 1) {
+ argc--; argv++;
+ if (!args->cmdline) {
+ char *buf;
+
+ buf = mrb_malloc(mrb, strlen(argv[0])+1);
+ strcpy(buf, argv[0]);
+ args->cmdline = buf;
+ }
+ else {
+ args->cmdline = mrb_realloc(mrb, args->cmdline, strlen(args->cmdline)+strlen(argv[0])+2);
+ strcat(args->cmdline, "\n");
+ strcat(args->cmdline, argv[0]);
+ }
}
- }
- else if (args->rfp == NULL) {
- if ((args->rfp = fopen(*argv, args->mrbfile ? "rb" : "r")) == NULL) {
- printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
- return 0;
+ else {
+ printf("%s: No code specified for -e\n", *origargv);
+ return 0;
}
- nomore_flags = 1;
- }
- else {
- args->argv = mrb_realloc(mrb, args->argv, sizeof(char*) * (args->argc + 1));
- args->argv[args->argc] = *argv;
- args->argc++;
+ break;
+ case 'v':
+ ruby_show_version(mrb);
+ args->verbose = 1;
+ break;
+ case '-':
+ if (strcmp((*argv) + 2, "version") == 0) {
+ ruby_show_version(mrb);
+ }
+ else if (strcmp((*argv) + 2, "verbose") == 0) {
+ args->verbose = 1;
+ break;
+ }
+ else if (strcmp((*argv) + 2, "copyright") == 0) {
+ ruby_show_copyright(mrb);
+ }
+ else return -3;
+ return 0;
}
}
+
+ if (args->rfp == NULL && args->cmdline == NULL && (args->rfp = fopen(*argv, args->mrbfile ? "rb" : "r")) == NULL) {
+ printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
+ return 0;
+ }
+ args->argv = mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
+ memcpy(args->argv, argv, (argc+1) * sizeof(char*));
+ args->argc = argc;
+
return 0;
}
@@ -137,7 +133,6 @@ main(int argc, char **argv)
mrb_state *mrb = mrb_open();
int n = -1;
int i;
- char* value;
struct _args args;
struct mrb_parser_state *p;