src/windows/bin/cmdtoargs.c

Print this page




 111             }
 112             if (quotes % 2 == 1) {
 113                 *dest++ = ch;
 114             } else {
 115                 separator = JNI_TRUE;
 116             }
 117             slashes = 0;
 118             break;
 119 
 120         case '*':
 121         case '?':
 122             if (separator) {
 123                 done = JNI_TRUE;
 124                 separator = JNI_FALSE;
 125                 break;
 126             }
 127             if (quotes % 2 == 0) {
 128                 *wildcard = JNI_TRUE;
 129             }
 130             if (prev == '\\') {

 131                 *dest++ = prev;
 132             }

 133             *dest++ = ch;
 134             break;
 135 
 136         default:
 137             if (prev == '\\') {
 138                 for (i = 0 ; i < slashes ; i++) {
 139                    *dest++ = prev;
 140                 }
 141                 *dest++ = ch;
 142             } else if (separator) {
 143                 done = JNI_TRUE;
 144             } else {
 145                 *dest++ = ch;
 146             }
 147             slashes = 0;
 148         }
 149 
 150         if (!done) {
 151             prev = ch;
 152             src++;


 167 
 168 StdArg* JLI_GetStdArgs() {
 169     return stdargs;
 170 }
 171 
 172 void JLI_CmdToArgs(char* cmdline) {
 173     int nargs = 0;
 174     StdArg* argv = NULL;
 175     jboolean wildcard = JNI_FALSE;
 176     char* src = cmdline;
 177 
 178     // allocate arg buffer with sufficient space to receive the largest arg
 179     char* arg = JLI_StringDup(cmdline);
 180 
 181     do {
 182         src = next_arg(src, arg, &wildcard);
 183         // resize to accommodate another Arg
 184         argv = (StdArg*) JLI_MemRealloc(argv, (nargs+1) * sizeof(StdArg));
 185         argv[nargs].arg = JLI_StringDup(arg);
 186         argv[nargs].has_wildcard = wildcard;
 187 
 188         nargs++;
 189     } while (src != NULL);
 190 
 191     stdargc = nargs;
 192     stdargs = argv;
 193 }
 194 
 195 #ifdef IDE_STANDALONE
 196 void doexit(int rv) {
 197     printf("Hit any key to quit\n");
 198     int c = getchar();
 199     exit(rv);
 200 }
 201 
 202 void doabort() {
 203     doexit(1);
 204 }
 205 
 206 class Vector {
 207 public:


 585     v->add("../../*", TRUE);
 586     // v->disable();
 587     vectors[i++] = v;
 588 
 589     v = new Vector(argv[0], "..\\..\\");
 590     v->add("..\\..\\", FALSE);
 591     // v->disable();
 592     vectors[i++] = v;
 593 
 594     v = new Vector(argv[0], "../../");
 595     v->add("../../", FALSE);
 596     // v->disable();
 597     vectors[i++] = v;
 598 
 599     v= new Vector(argv[0], "a b\\\\ d");
 600     v->add("a", FALSE);
 601     v->add("b\\\\", FALSE);
 602     v->add("d", FALSE);
 603     vectors[i++] = v;
 604 








 605     dotest(vectors);
 606     printf("All tests pass [%d]\n", i);
 607     doexit(0);
 608 }
 609 #endif /* IDE_STANDALONE */


 111             }
 112             if (quotes % 2 == 1) {
 113                 *dest++ = ch;
 114             } else {
 115                 separator = JNI_TRUE;
 116             }
 117             slashes = 0;
 118             break;
 119 
 120         case '*':
 121         case '?':
 122             if (separator) {
 123                 done = JNI_TRUE;
 124                 separator = JNI_FALSE;
 125                 break;
 126             }
 127             if (quotes % 2 == 0) {
 128                 *wildcard = JNI_TRUE;
 129             }
 130             if (prev == '\\') {
 131                 for (i = 0 ; i < slashes ; i++) {
 132                     *dest++ = prev;
 133                 }
 134             }
 135             *dest++ = ch;
 136             break;
 137 
 138         default:
 139             if (prev == '\\') {
 140                 for (i = 0 ; i < slashes ; i++) {
 141                    *dest++ = prev;
 142                 }
 143                 *dest++ = ch;
 144             } else if (separator) {
 145                 done = JNI_TRUE;
 146             } else {
 147                 *dest++ = ch;
 148             }
 149             slashes = 0;
 150         }
 151 
 152         if (!done) {
 153             prev = ch;
 154             src++;


 169 
 170 StdArg* JLI_GetStdArgs() {
 171     return stdargs;
 172 }
 173 
 174 void JLI_CmdToArgs(char* cmdline) {
 175     int nargs = 0;
 176     StdArg* argv = NULL;
 177     jboolean wildcard = JNI_FALSE;
 178     char* src = cmdline;
 179 
 180     // allocate arg buffer with sufficient space to receive the largest arg
 181     char* arg = JLI_StringDup(cmdline);
 182 
 183     do {
 184         src = next_arg(src, arg, &wildcard);
 185         // resize to accommodate another Arg
 186         argv = (StdArg*) JLI_MemRealloc(argv, (nargs+1) * sizeof(StdArg));
 187         argv[nargs].arg = JLI_StringDup(arg);
 188         argv[nargs].has_wildcard = wildcard;
 189         *arg = NULL;
 190         nargs++;
 191     } while (src != NULL);
 192 
 193     stdargc = nargs;
 194     stdargs = argv;
 195 }
 196 
 197 #ifdef IDE_STANDALONE
 198 void doexit(int rv) {
 199     printf("Hit any key to quit\n");
 200     int c = getchar();
 201     exit(rv);
 202 }
 203 
 204 void doabort() {
 205     doexit(1);
 206 }
 207 
 208 class Vector {
 209 public:


 587     v->add("../../*", TRUE);
 588     // v->disable();
 589     vectors[i++] = v;
 590 
 591     v = new Vector(argv[0], "..\\..\\");
 592     v->add("..\\..\\", FALSE);
 593     // v->disable();
 594     vectors[i++] = v;
 595 
 596     v = new Vector(argv[0], "../../");
 597     v->add("../../", FALSE);
 598     // v->disable();
 599     vectors[i++] = v;
 600 
 601     v= new Vector(argv[0], "a b\\\\ d");
 602     v->add("a", FALSE);
 603     v->add("b\\\\", FALSE);
 604     v->add("d", FALSE);
 605     vectors[i++] = v;
 606 
 607     v= new Vector(argv[0], "\\\\?");
 608     v->add("\\\\?", TRUE);
 609     vectors[i++] = v;
 610 
 611     v= new Vector(argv[0], "\\\\*");
 612     v->add("\\\\*", TRUE);
 613     vectors[i++] = v;
 614 
 615     dotest(vectors);
 616     printf("All tests pass [%d]\n", i);
 617     doexit(0);
 618 }
 619 #endif /* IDE_STANDALONE */