aboutsummaryrefslogtreecommitdiff
path: root/ports/unix
diff options
context:
space:
mode:
Diffstat (limited to 'ports/unix')
-rw-r--r--ports/unix/main.c12
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();