Mercurial > hg > Members > kono > os9 > sbc09
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); }