diff os9/mc09/mclibos9.c @ 104:096b3fc7aa66

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 28 Dec 2018 17:43:55 +0900
parents 844305752064
children 6eef99bb4771
line wrap: on
line diff
--- a/os9/mc09/mclibos9.c	Thu Dec 27 20:16:34 2018 +0900
+++ b/os9/mc09/mclibos9.c	Fri Dec 28 17:43:55 2018 +0900
@@ -31,10 +31,11 @@
 #define STDOUT (&_s0[1])
 #define STDERR (&_s0[2])
 
-_main(args)
+_main(args,prog)
 char *args;
+char *prog;
 {int i;
- char **argv,*p;
+ char **argv,*p,*q;
  int argc,n,quote,c;
 	stdin = STDIN;  stdin->fd = 0;
 	stdout = STDOUT;  stdout->fd = 1;
@@ -44,34 +45,40 @@
         /* create argv here */
         argc = 0;
         argv = 0;
-        n = 0;
-        quote = 0;
         for( i = 0; i < 2 ; i++ ) {
-            if (i==1 && argc) { argv = (char**)malloc(sizeof(char*)*argc); }
-            p = args;
-            while((c = *p++)) {
-                if (i==1) argv[n] = args;
+            if (i==1) { 
+                argv = (char**)malloc(sizeof(char*)*(argc+1)); 
+                argv[0] = prog; 
+            }
+            n = 1;
+            quote = 0;
+            q = p = args;
+            if (i==1) argv[n] = args;
+            while((c = *p++) && c!='\r') {
                 if (c=='\'') { 
                     if (!quote) {
-                        if (i==1) argv[n]++;
+                        q--; 
                         quote = 1;
-                        continue;
                     } else {
-                        if (i==1) p[-1]=0;
+                        if (i==1) *q=0;
                         quote = 0;
                     }
                 } else if (c=='\\') {
                     p++;
-                    continue;
                 } else if (c==' ') {
-                    if (quote) 
-                        continue;
-                    if (i==1) p[-1]=0;
+                    if (!quote) {
+                        if (i==1) {
+                            *q = 0; argv[n++] = q+1;
+                        }
+                    }
                 }
-                n++;
+                if (i==1) *q = *p;
+                q++; p++;
             }
-            p[-1]=0;
+            if (i==1) *q = 0;
+            argc = n;
         }
+        argv[n]=0;
 	main(argc,argv);
 }