diff options
Diffstat (limited to 'ports/unix')
| -rw-r--r-- | ports/unix/main.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/ports/unix/main.c b/ports/unix/main.c index 07db8d22c..129c6d3bb 100644 --- a/ports/unix/main.c +++ b/ports/unix/main.c @@ -341,6 +341,9 @@ STATIC int invalid_args(void) { STATIC void pre_process_options(int argc, char **argv) { for (int a = 1; a < argc; a++) { if (argv[a][0] == '-') { + if (strcmp(argv[a], "-c") == 0 || strcmp(argv[a], "-m") == 0) { + break; // Everything after this is a command/module and arguments for it + } if (strcmp(argv[a], "-h") == 0) { print_help(argv); exit(0); @@ -400,6 +403,8 @@ STATIC void pre_process_options(int argc, char **argv) { } a++; } + } else { + break; // Not an option but a file } } } @@ -568,11 +573,10 @@ MP_NOINLINE int main_(int argc, char **argv) { if (a + 1 >= argc) { return invalid_args(); } + set_sys_argv(argv, a + 1, a); // The -c becomes first item of sys.argv, as in CPython + set_sys_argv(argv, argc, a + 2); // Then what comes after the command ret = do_str(argv[a + 1]); - if (ret & FORCED_EXIT) { - break; - } - a += 1; + break; } else if (strcmp(argv[a], "-m") == 0) { if (a + 1 >= argc) { return invalid_args(); |
