60 } else {
61 *((USHORT *)dest) = ch;
62 return 2;
63 }
64 }
65
66 static char* next_arg(char* cmdline, char* arg, jboolean* wildcard) {
67
68 char* src = cmdline;
69 char* dest = arg;
70 jboolean separator = JNI_FALSE;
71 int quotes = 0;
72 int slashes = 0;
73
74 // "prev"/"ch" may contain either a single byte, or a double byte
75 // character encoded in CP_ACP.
76 USHORT prev = 0;
77 USHORT ch = 0;
78 int i;
79 jboolean done = JNI_FALSE;
80 int charLength;
81
82 *wildcard = JNI_FALSE;
83 while (!done) {
84 charLength = CharNextExA(CP_ACP, src, 0) - src;
85 if (charLength == 0) {
86 break;
87 } else if (charLength == 1) {
88 ch = (USHORT)(UCHAR)src[0];
89 } else {
90 ch = ((USHORT *)src)[0];
91 }
92
93 switch (ch) {
94 case L'"':
95 if (separator) {
96 done = JNI_TRUE;
97 break;
98 }
99 if (prev == L'\\') {
100 for (i = 1; i < slashes; i += 2) {
191
192 StdArg* JLI_GetStdArgs() {
193 return stdargs;
194 }
195
196 void JLI_CmdToArgs(char* cmdline) {
197 int nargs = 0;
198 StdArg* argv = NULL;
199 jboolean wildcard = JNI_FALSE;
200 char* src = cmdline;
201
202 // allocate arg buffer with sufficient space to receive the largest arg
203 char* arg = JLI_StringDup(cmdline);
204
205 do {
206 src = next_arg(src, arg, &wildcard);
207 // resize to accommodate another Arg
208 argv = (StdArg*) JLI_MemRealloc(argv, (nargs+1) * sizeof(StdArg));
209 argv[nargs].arg = JLI_StringDup(arg);
210 argv[nargs].has_wildcard = wildcard;
211 *arg = NULL;
212 nargs++;
213 } while (src != NULL);
214
215 stdargc = nargs;
216 stdargs = argv;
217 }
218
219 #ifdef IDE_STANDALONE
220 void doexit(int rv) {
221 printf("Hit any key to quit\n");
222 int c = getchar();
223 exit(rv);
224 }
225
226 void doabort() {
227 doexit(1);
228 }
229
230 class Vector {
231 public:
232 char* cmdline;
233 int argc;
|
60 } else {
61 *((USHORT *)dest) = ch;
62 return 2;
63 }
64 }
65
66 static char* next_arg(char* cmdline, char* arg, jboolean* wildcard) {
67
68 char* src = cmdline;
69 char* dest = arg;
70 jboolean separator = JNI_FALSE;
71 int quotes = 0;
72 int slashes = 0;
73
74 // "prev"/"ch" may contain either a single byte, or a double byte
75 // character encoded in CP_ACP.
76 USHORT prev = 0;
77 USHORT ch = 0;
78 int i;
79 jboolean done = JNI_FALSE;
80 size_t charLength;
81
82 *wildcard = JNI_FALSE;
83 while (!done) {
84 charLength = CharNextExA(CP_ACP, src, 0) - src;
85 if (charLength == 0) {
86 break;
87 } else if (charLength == 1) {
88 ch = (USHORT)(UCHAR)src[0];
89 } else {
90 ch = ((USHORT *)src)[0];
91 }
92
93 switch (ch) {
94 case L'"':
95 if (separator) {
96 done = JNI_TRUE;
97 break;
98 }
99 if (prev == L'\\') {
100 for (i = 1; i < slashes; i += 2) {
191
192 StdArg* JLI_GetStdArgs() {
193 return stdargs;
194 }
195
196 void JLI_CmdToArgs(char* cmdline) {
197 int nargs = 0;
198 StdArg* argv = NULL;
199 jboolean wildcard = JNI_FALSE;
200 char* src = cmdline;
201
202 // allocate arg buffer with sufficient space to receive the largest arg
203 char* arg = JLI_StringDup(cmdline);
204
205 do {
206 src = next_arg(src, arg, &wildcard);
207 // resize to accommodate another Arg
208 argv = (StdArg*) JLI_MemRealloc(argv, (nargs+1) * sizeof(StdArg));
209 argv[nargs].arg = JLI_StringDup(arg);
210 argv[nargs].has_wildcard = wildcard;
211 *arg = '\0';
212 nargs++;
213 } while (src != NULL);
214
215 JLI_MemFree(arg);
216
217 stdargc = nargs;
218 stdargs = argv;
219 }
220
221 #ifdef IDE_STANDALONE
222 void doexit(int rv) {
223 printf("Hit any key to quit\n");
224 int c = getchar();
225 exit(rv);
226 }
227
228 void doabort() {
229 doexit(1);
230 }
231
232 class Vector {
233 public:
234 char* cmdline;
235 int argc;
|