src/java.base/windows/native/libjli/cmdtoargs.c
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File jdk Sdiff src/java.base/windows/native/libjli

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

Print this page
rev 11654 : imported patch libjli


  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;


src/java.base/windows/native/libjli/cmdtoargs.c
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File