< prev index next >

src/java.base/windows/native/libjli/cmdtoargs.c

Print this page
rev 12309 : 8027634: Support @argfiles for java command-line tool
Reviewed-by: ksrini, mchung


 176             src += charLength;
 177         }
 178     }
 179     if (prev == L'\\') {
 180         for (i = 0; i < slashes; i++) {
 181             dest += copyCh(prev, dest);
 182         }
 183     }
 184     *dest = 0;
 185     return done ? src : NULL;
 186 }
 187 
 188 int JLI_GetStdArgc() {
 189     return stdargc;
 190 }
 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 {




 176             src += charLength;
 177         }
 178     }
 179     if (prev == L'\\') {
 180         for (i = 0; i < slashes; i++) {
 181             dest += copyCh(prev, dest);
 182         }
 183     }
 184     *dest = 0;
 185     return done ? src : NULL;
 186 }
 187 
 188 int JLI_GetStdArgc() {
 189     return stdargc;
 190 }
 191 
 192 StdArg* JLI_GetStdArgs() {
 193     return stdargs;
 194 }
 195 
 196 void JLI_CmdToArgs(char* cmdline, jboolean not_java) {
 197     int nargs = 0;
 198     StdArg* argv = NULL;
 199     jboolean wildcard = JNI_FALSE;
 200     char* src = cmdline;
 201     JLI_List argsInFile;
 202 
 203     // allocate arg buffer with sufficient space to receive the largest arg
 204     char* arg = JLI_StringDup(cmdline);
 205 
 206     do {
 207         src = next_arg(src, arg, &wildcard);
 208         argsInFile = JLI_ExpandArgFile(arg, not_java);
 209         if (argsInFile != NULL) {
 210             int cnt, i;
 211             // resize to accommodate another Arg
 212             cnt = argsInFile->size;
 213             argv = (StdArg*) JLI_MemRealloc(argv, (nargs + cnt) * sizeof(StdArg));
 214             for (i = 0; i < cnt; i++) {
 215                 argv[nargs].arg = argsInFile->elements[i];
 216                 // wildcard is not supported in argfile
 217                 argv[nargs].has_wildcard = JNI_FALSE;
 218                 nargs++;
 219             }
 220             // Shallow free, we reuse the string to avoid copy
 221             JLI_MemFree(argsInFile->elements);
 222             JLI_MemFree(argsInFile);
 223         } else {
 224             // resize to accommodate another Arg
 225             argv = (StdArg*) JLI_MemRealloc(argv, (nargs+1) * sizeof(StdArg));
 226             argv[nargs].arg = JLI_StringDup(arg);
 227             argv[nargs].has_wildcard = wildcard;
 228             *arg = '\0';
 229             nargs++;
 230         }
 231         *arg = '\0';
 232     } while (src != NULL);
 233 
 234     JLI_MemFree(arg);
 235 
 236     stdargc = nargs;
 237     stdargs = argv;
 238 }
 239 
 240 #ifdef IDE_STANDALONE
 241 void doexit(int rv) {
 242     printf("Hit any key to quit\n");
 243     int c = getchar();
 244     exit(rv);
 245 }
 246 
 247 void doabort() {
 248     doexit(1);
 249 }
 250 
 251 class Vector {


< prev index next >