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 */
|