jdk/src/java.base/windows/native/libjli/cmdtoargs.c
author henryjen
Wed, 08 Jul 2015 23:26:48 -0700
changeset 32267 4e96a9ee01b1
parent 29742 b73f38796859
child 39309 1a3bcf3d6034
permissions -rw-r--r--
8027634: Support @argfiles for java command-line tool Reviewed-by: ksrini, mchung
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
     1
/*
29742
b73f38796859 8074840: Resolve disabled warnings for libjli and libjli_static
mikael
parents: 28059
diff changeset
     2
 * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
     4
 *
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    10
 *
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    15
 * accompanied this code).
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    16
 *
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    20
 *
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    23
 * questions.
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    24
 */
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    25
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    26
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    27
/*
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    28
 * Converts a single string command line to the traditional argc, argv.
28059
e576535359cc 8067377: My hobby: caning, then then canning, the the can-can
martin
parents: 25859
diff changeset
    29
 * There are rules which govern the breaking of the arguments, and
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    30
 * these rules are embodied in the regression tests below, and duplicated
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    31
 * in the jdk regression tests.
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    32
 */
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    33
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    34
#ifndef IDE_STANDALONE
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    35
#include "java.h"
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    36
#include "jli_util.h"
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    37
#else /* IDE_STANDALONE */
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    38
// The defines we need for stand alone testing
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    39
#include <stdio.h>
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    40
#include <stdlib.h>
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    41
#include <Windows.h>
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    42
#define JNI_TRUE       TRUE
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    43
#define JNI_FALSE      FALSE
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    44
#define JLI_MemRealloc realloc
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    45
#define JLI_StringDup  _strdup
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    46
#define JLI_MemFree    free
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    47
#define jboolean       boolean
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    48
typedef struct  {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    49
    char* arg;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    50
    boolean has_wildcard;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    51
} StdArg ;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    52
#endif
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    53
static StdArg *stdargs;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    54
static int    stdargc;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    55
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    56
static int copyCh(USHORT ch, char* dest) {
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    57
    if (HIBYTE(ch) == 0) {
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    58
        *dest = (char)ch;
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    59
        return 1;
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    60
    } else {
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    61
        *((USHORT *)dest) = ch;
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    62
        return 2;
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    63
    }
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    64
}
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    65
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    66
static char* next_arg(char* cmdline, char* arg, jboolean* wildcard) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    67
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    68
    char* src = cmdline;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    69
    char* dest = arg;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    70
    jboolean separator = JNI_FALSE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    71
    int quotes = 0;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    72
    int slashes = 0;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    73
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    74
    // "prev"/"ch" may contain either a single byte, or a double byte
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    75
    // character encoded in CP_ACP.
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    76
    USHORT prev = 0;
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    77
    USHORT ch = 0;
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    78
    int i;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    79
    jboolean done = JNI_FALSE;
29742
b73f38796859 8074840: Resolve disabled warnings for libjli and libjli_static
mikael
parents: 28059
diff changeset
    80
    ptrdiff_t charLength;
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    81
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    82
    *wildcard = JNI_FALSE;
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    83
    while (!done) {
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    84
        charLength = CharNextExA(CP_ACP, src, 0) - src;
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    85
        if (charLength == 0) {
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    86
            break;
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    87
        } else if (charLength == 1) {
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    88
            ch = (USHORT)(UCHAR)src[0];
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    89
        } else {
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    90
            ch = ((USHORT *)src)[0];
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    91
        }
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    92
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    93
        switch (ch) {
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    94
        case L'"':
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    95
            if (separator) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    96
                done = JNI_TRUE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    97
                break;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
    98
            }
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
    99
            if (prev == L'\\') {
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   100
                for (i = 1; i < slashes; i += 2) {
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   101
                    dest += copyCh(prev, dest);
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   102
                }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   103
                if (slashes % 2 == 1) {
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   104
                    dest += copyCh(ch, dest);
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   105
                } else {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   106
                    quotes++;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   107
                }
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   108
            } else if (prev == L'"' && quotes % 2 == 0) {
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   109
                quotes++;
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   110
                dest += copyCh(ch, dest); // emit every other consecutive quote
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   111
            } else if (quotes == 0) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   112
                quotes++; // starting quote
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   113
            } else {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   114
                quotes--; // matching quote
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   115
            }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   116
            slashes = 0;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   117
            break;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   118
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   119
        case L'\\':
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   120
            slashes++;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   121
            if (separator) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   122
                done = JNI_TRUE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   123
                separator = JNI_FALSE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   124
            }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   125
            break;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   126
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   127
        case L' ':
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   128
        case L'\t':
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   129
            if (prev == L'\\') {
15523
cc0ee864bfb5 8006536: [launcher] removes trailing slashes on arguments
ksrini
parents: 13410
diff changeset
   130
                for (i = 0 ; i < slashes; i++) {
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   131
                    dest += copyCh(prev, dest);
15523
cc0ee864bfb5 8006536: [launcher] removes trailing slashes on arguments
ksrini
parents: 13410
diff changeset
   132
                }
cc0ee864bfb5 8006536: [launcher] removes trailing slashes on arguments
ksrini
parents: 13410
diff changeset
   133
            }
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   134
            if (quotes % 2 == 1) {
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   135
                dest += copyCh(ch, dest);
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   136
            } else {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   137
                separator = JNI_TRUE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   138
            }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   139
            slashes = 0;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   140
            break;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   141
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   142
        case L'*':
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   143
        case L'?':
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   144
            if (separator) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   145
                done = JNI_TRUE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   146
                separator = JNI_FALSE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   147
                break;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   148
            }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   149
            if (quotes % 2 == 0) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   150
                *wildcard = JNI_TRUE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   151
            }
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   152
            if (prev == L'\\') {
17714
04271182b2c1 8007333: [launcher] removes multiple back slashes
ksrini
parents: 15523
diff changeset
   153
                for (i = 0 ; i < slashes ; i++) {
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   154
                    dest += copyCh(prev, dest);
17714
04271182b2c1 8007333: [launcher] removes multiple back slashes
ksrini
parents: 15523
diff changeset
   155
                }
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   156
            }
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   157
            dest += copyCh(ch, dest);
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   158
            break;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   159
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   160
        default:
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   161
            if (prev == L'\\') {
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   162
                for (i = 0 ; i < slashes ; i++) {
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   163
                    dest += copyCh(prev, dest);
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   164
                }
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   165
                dest += copyCh(ch, dest);
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   166
            } else if (separator) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   167
                done = JNI_TRUE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   168
            } else {
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   169
                dest += copyCh(ch, dest);
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   170
            }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   171
            slashes = 0;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   172
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   173
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   174
        if (!done) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   175
            prev = ch;
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   176
            src += charLength;
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   177
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   178
    }
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   179
    if (prev == L'\\') {
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   180
        for (i = 0; i < slashes; i++) {
20488
a2718559a91c 8016110: Japanese char (MS932) 0x5C cannot be used as an argument when quoted
naoto
parents: 17714
diff changeset
   181
            dest += copyCh(prev, dest);
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   182
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   183
    }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   184
    *dest = 0;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   185
    return done ? src : NULL;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   186
}
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   187
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   188
int JLI_GetStdArgc() {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   189
    return stdargc;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   190
}
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   191
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   192
StdArg* JLI_GetStdArgs() {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   193
    return stdargs;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   194
}
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   195
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   196
void JLI_CmdToArgs(char* cmdline) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   197
    int nargs = 0;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   198
    StdArg* argv = NULL;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   199
    jboolean wildcard = JNI_FALSE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   200
    char* src = cmdline;
32267
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   201
    JLI_List argsInFile;
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   202
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   203
    // allocate arg buffer with sufficient space to receive the largest arg
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   204
    char* arg = JLI_StringDup(cmdline);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   205
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   206
    do {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   207
        src = next_arg(src, arg, &wildcard);
32267
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   208
        argsInFile = JLI_PreprocessArg(arg);
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   209
        if (argsInFile != NULL) {
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   210
            size_t cnt, i;
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   211
            // resize to accommodate another Arg
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   212
            cnt = argsInFile->size;
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   213
            argv = (StdArg*) JLI_MemRealloc(argv, (nargs + cnt) * sizeof(StdArg));
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   214
            for (i = 0; i < cnt; i++) {
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   215
                argv[nargs].arg = argsInFile->elements[i];
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   216
                // wildcard is not supported in argfile
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   217
                argv[nargs].has_wildcard = JNI_FALSE;
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   218
                nargs++;
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   219
            }
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   220
            // Shallow free, we reuse the string to avoid copy
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   221
            JLI_MemFree(argsInFile->elements);
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   222
            JLI_MemFree(argsInFile);
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   223
        } else {
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   224
            // resize to accommodate another Arg
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   225
            argv = (StdArg*) JLI_MemRealloc(argv, (nargs+1) * sizeof(StdArg));
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   226
            argv[nargs].arg = JLI_StringDup(arg);
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   227
            argv[nargs].has_wildcard = wildcard;
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   228
            *arg = '\0';
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   229
            nargs++;
4e96a9ee01b1 8027634: Support @argfiles for java command-line tool
henryjen
parents: 29742
diff changeset
   230
        }
29742
b73f38796859 8074840: Resolve disabled warnings for libjli and libjli_static
mikael
parents: 28059
diff changeset
   231
        *arg = '\0';
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   232
    } while (src != NULL);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   233
29742
b73f38796859 8074840: Resolve disabled warnings for libjli and libjli_static
mikael
parents: 28059
diff changeset
   234
    JLI_MemFree(arg);
b73f38796859 8074840: Resolve disabled warnings for libjli and libjli_static
mikael
parents: 28059
diff changeset
   235
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   236
    stdargc = nargs;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   237
    stdargs = argv;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   238
}
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   239
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   240
#ifdef IDE_STANDALONE
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   241
void doexit(int rv) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   242
    printf("Hit any key to quit\n");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   243
    int c = getchar();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   244
    exit(rv);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   245
}
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   246
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   247
void doabort() {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   248
    doexit(1);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   249
}
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   250
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   251
class Vector {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   252
public:
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   253
    char* cmdline;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   254
    int argc;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   255
    char* argv[10];
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   256
    boolean wildcard[10];
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   257
    boolean enabled;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   258
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   259
    Vector(){}
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   260
    // Initialize our test vector with the program name, argv[0]
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   261
    // and the single string command line.
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   262
    Vector(char* pname, char* cline) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   263
        argv[0] = pname;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   264
        wildcard[0] = FALSE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   265
        cmdline = cline;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   266
        argc = 1;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   267
        enabled = TRUE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   268
    }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   269
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   270
    // add our expected strings, the program name has already been
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   271
    // added so ignore that
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   272
    void add(char* arg, boolean w) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   273
        argv[argc] = arg;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   274
        wildcard[argc] = w;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   275
        argc++;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   276
    }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   277
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   278
    void disable() {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   279
        enabled = FALSE;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   280
    }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   281
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   282
    // validate the returned arguments with the expected arguments, using the
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   283
    // new CmdToArgs method.
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   284
    bool check() {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   285
        // "pgmname" rest of cmdline ie. pgmname + 2 double quotes + space + cmdline from windows
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   286
        char* cptr = (char*) malloc(strlen(argv[0]) + sizeof(char) * 3 + strlen(cmdline) + 1);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   287
        _snprintf(cptr, MAX_PATH, "\"%s\" %s", argv[0], cmdline);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   288
        JLI_CmdToArgs(cptr);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   289
        free(cptr);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   290
        StdArg *kargv = JLI_GetStdArgs();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   291
        int     kargc = JLI_GetStdArgc();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   292
        bool retval = true;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   293
        printf("\n===========================\n");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   294
        printf("cmdline=%s\n", cmdline);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   295
        if (argc != kargc) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   296
            printf("*** argument count does not match\n");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   297
            printme();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   298
            printtest(kargc, kargv);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   299
            doabort();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   300
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   301
        for (int i = 0 ; i < argc && retval == true ; i++) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   302
            if (strcmp(argv[i], kargv[i].arg) != 0) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   303
                printf("*** argument at [%d] don't match\n  got: %s\n  exp: %s\n",
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   304
                       i, kargv[i].arg, argv[i]);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   305
                doabort();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   306
            }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   307
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   308
        for (int i = 0 ; i < argc && retval == true ; i++) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   309
            if (wildcard[i] != kargv[i].has_wildcard) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   310
                printf("*** expansion flag at [%d] doesn't match\n  got: %d\n  exp: %d\n",
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   311
                       i, kargv[i].has_wildcard, wildcard[i]);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   312
                doabort();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   313
            }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   314
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   315
        for (int i = 0 ; i < kargc ; i++) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   316
            printf("k[%d]=%s\n", i, kargv[i].arg);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   317
            printf(" [%d]=%s\n", i, argv[i]);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   318
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   319
        return retval;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   320
    }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   321
    void printtest(int kargc, StdArg* kargv) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   322
        for (int i = 0 ; i < kargc ; i++) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   323
            printf("k[%d]=%s\n", i, kargv[i].arg);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   324
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   325
    }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   326
    void printme() {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   327
        for (int i = 0 ; i < argc ; i++) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   328
            printf(" [%d]=%s\n", i, argv[i]);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   329
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   330
    }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   331
};
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   332
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   333
void dotest(Vector** vectors) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   334
    Vector* v = vectors[0];
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   335
    for (int i = 0 ; v != NULL;) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   336
        if (v->enabled) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   337
            v->check();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   338
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   339
        v = vectors[++i];
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   340
    }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   341
}
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   342
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   343
#define MAXV 128
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   344
int main(int argc, char* argv[]) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   345
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   346
    int n;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   347
    for (n=1; n < argc; n++) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   348
        printf("%d %s\n", n, argv[n]);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   349
    }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   350
    if (n > 1) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   351
        JLI_CmdToArgs(GetCommandLine());
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   352
        for (n = 0; n < stdargc; n++) {
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   353
            printf(" [%d]=%s\n", n, stdargs[n].arg);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   354
            printf(" [%d]=%s\n", n, stdargs[n].has_wildcard ? "TRUE" : "FALSE");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   355
        }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   356
        doexit(0);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   357
    }
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   358
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   359
    Vector *vectors[MAXV];
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   360
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   361
    memset(vectors, 0, sizeof(vectors));
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   362
    int i = 0;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   363
    Vector* v = new Vector(argv[0], "abcd");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   364
    v->add("abcd", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   365
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   366
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   367
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   368
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   369
    v = new Vector(argv[0], "\"a b c d\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   370
    v->add("a b c d", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   371
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   372
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   373
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   374
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   375
    v = new Vector(argv[0], "a\"b c d\"e");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   376
    v->add("ab c de", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   377
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   378
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   379
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   380
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   381
    v = new Vector(argv[0], "ab\\\"cd");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   382
    v->add("ab\"cd", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   383
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   384
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   385
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   386
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   387
    v = new Vector(argv[0], "\"a b c d\\\\\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   388
    v->add("a b c d\\", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   389
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   390
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   391
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   392
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   393
    v = new Vector(argv[0], "ab\\\\\\\"cd");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   394
    v->add("ab\\\"cd", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   395
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   396
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   397
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   398
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   399
    // Windows tests
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   400
    v = new Vector(argv[0], "a\\\\\\c");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   401
    v->add("a\\\\\\c", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   402
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   403
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   404
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   405
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   406
    v = new Vector(argv[0], "\"a\\\\\\d\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   407
    v->add("a\\\\\\d", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   408
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   409
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   411
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   412
    v = new Vector(argv[0], "\"a b c\" d e");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   413
    v->add("a b c", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   414
    v->add("d", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   415
    v->add("e", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   416
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   417
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   418
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   419
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   420
    v = new Vector(argv[0], "\"ab\\\"c\"  \"\\\\\"  d");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   421
    v->add("ab\"c", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   422
    v->add("\\", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   423
    v->add("d", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   424
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   425
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   426
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   427
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   428
    v = new Vector(argv[0], "a\\\\\\c d\"e f\"g h");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   429
    v->add("a\\\\\\c", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   430
    v->add("de fg", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   431
    v->add("h", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   432
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   433
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   434
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   435
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   436
    v = new Vector(argv[0], "a\\\\\\\"b c d");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   437
    v->add("a\\\"b", FALSE); // XXX "a\\\\\\\"b"
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   438
    v->add("c", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   439
    v->add("d", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   440
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   441
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   442
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   443
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   444
    v = new Vector(argv[0], "a\\\\\\\\\"g c\" d e"); // XXX "a\\\\\\\\\"b c\" d e"
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   445
    v->add("a\\\\\g c", FALSE); // XXX "a\\\\\\\\\"b c"
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   446
    v->add("d", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   447
    v->add("e", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   448
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   449
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   450
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   451
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   452
    // Additional tests
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   453
    v = new Vector(argv[0], "\"a b c\"\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   454
    v->add("a b c\"", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   455
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   456
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   457
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   458
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   459
    v = new Vector(argv[0], "\"\"a b c\"\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   460
    v->add("a", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   461
    v->add("b", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   462
    v->add("c", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   463
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   464
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   465
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   466
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   467
    v = new Vector(argv[0], "\"\"\"a b c\"\"\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   468
    v->add("\"a b c\"", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   469
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   470
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   471
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   472
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   473
    v = new Vector(argv[0], "\"\"\"\"a b c\"\"\"\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   474
    v->add("\"a", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   475
    v->add("b", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   476
    v->add("c\"", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   477
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   478
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   479
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   480
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   481
    v = new Vector(argv[0], "\"\"\"\"\"a b c\"\"\"\"\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   482
    v->add("\"\"a b c\"\"", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   483
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   484
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   485
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   486
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   487
    v = new Vector(argv[0], "\"C:\\TEST A\\\\\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   488
    v->add("C:\\TEST A\\", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   489
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   490
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   491
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   492
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   493
    v = new Vector(argv[0], "\"\"C:\\TEST A\\\\\"\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   494
    v->add("C:\\TEST", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   495
    v->add("A\\", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   496
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   497
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   498
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   499
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   500
    // test if a wildcard is present
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   501
    v = new Vector(argv[0], "abc*def");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   502
    v->add("abc*def", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   503
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   504
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   505
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   506
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   507
    v = new Vector(argv[0], "\"abc*def\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   508
    v->add("abc*def", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   509
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   510
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   511
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   512
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   513
    v = new Vector(argv[0], "*.abc");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   514
    v->add("*.abc", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   515
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   516
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   517
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   518
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   519
    v = new Vector(argv[0], "\"*.abc\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   520
    v->add("*.abc", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   521
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   522
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   523
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   524
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   525
    v = new Vector(argv[0], "x.???");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   526
    v->add("x.???", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   527
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   528
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   529
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   530
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   531
    v = new Vector(argv[0], "\"x.???\"");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   532
    v->add("x.???", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   533
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   534
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   535
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   536
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   537
    v = new Vector(argv[0], "Debug\\*");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   538
    v->add("Debug\\*", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   539
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   540
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   541
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   542
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   543
    v = new Vector(argv[0], "Debug\\f?a");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   544
    v->add("Debug\\f?a", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   545
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   546
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   547
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   548
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   549
    v = new Vector(argv[0], "Debug\\?a.java");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   550
    v->add("Debug\\?a.java", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   551
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   552
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   553
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   554
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   555
    v = new Vector(argv[0], "foo *.noexts");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   556
    v->add("foo", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   557
    v->add("*.noexts", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   558
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   559
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   560
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   561
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   562
    v = new Vector(argv[0], "X\\Y\\Z");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   563
    v->add("X\\Y\\Z", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   564
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   565
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   566
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   567
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   568
    v = new Vector(argv[0], "\\X\\Y\\Z");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   569
    v->add("\\X\\Y\\Z", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   570
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   571
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   572
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   573
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   574
    v = new Vector(argv[0], "a b");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   575
    v->add("a", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   576
    v->add("b", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   577
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   578
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   579
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   580
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   581
    v = new Vector(argv[0], "a\tb");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   582
    v->add("a", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   583
    v->add("b", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   584
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   585
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   586
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   587
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   588
    v = new Vector(argv[0], "a \t b");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   589
    v->add("a", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   590
    v->add("b", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   591
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   592
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   593
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   594
    v = new Vector(argv[0], "*\\");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   595
    v->add("*\\", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   596
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   597
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   598
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   599
    v = new Vector(argv[0], "*/");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   600
    v->add("*/", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   601
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   602
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   603
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   604
    v = new Vector(argv[0], ".\\*");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   605
    v->add(".\\*", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   606
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   607
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   608
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   609
    v = new Vector(argv[0], "./*");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   610
    v->add("./*", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   611
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   612
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   613
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   614
    v = new Vector(argv[0], ".\\*");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   615
    v->add(".\\*", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   616
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   617
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   618
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   619
    v = new Vector(argv[0], ".//*");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   620
    v->add(".//*", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   621
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   622
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   623
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   624
    v = new Vector(argv[0], "..\\..\\*");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   625
    v->add("..\\..\\*", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   626
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   627
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   628
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   629
    v = new Vector(argv[0], "../../*");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   630
    v->add("../../*", TRUE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   631
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   632
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   633
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   634
    v = new Vector(argv[0], "..\\..\\");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   635
    v->add("..\\..\\", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   636
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   637
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   638
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   639
    v = new Vector(argv[0], "../../");
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   640
    v->add("../../", FALSE);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   641
    // v->disable();
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   642
    vectors[i++] = v;
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   643
15523
cc0ee864bfb5 8006536: [launcher] removes trailing slashes on arguments
ksrini
parents: 13410
diff changeset
   644
    v= new Vector(argv[0], "a b\\\\ d");
cc0ee864bfb5 8006536: [launcher] removes trailing slashes on arguments
ksrini
parents: 13410
diff changeset
   645
    v->add("a", FALSE);
cc0ee864bfb5 8006536: [launcher] removes trailing slashes on arguments
ksrini
parents: 13410
diff changeset
   646
    v->add("b\\\\", FALSE);
cc0ee864bfb5 8006536: [launcher] removes trailing slashes on arguments
ksrini
parents: 13410
diff changeset
   647
    v->add("d", FALSE);
cc0ee864bfb5 8006536: [launcher] removes trailing slashes on arguments
ksrini
parents: 13410
diff changeset
   648
    vectors[i++] = v;
cc0ee864bfb5 8006536: [launcher] removes trailing slashes on arguments
ksrini
parents: 13410
diff changeset
   649
17714
04271182b2c1 8007333: [launcher] removes multiple back slashes
ksrini
parents: 15523
diff changeset
   650
    v= new Vector(argv[0], "\\\\?");
04271182b2c1 8007333: [launcher] removes multiple back slashes
ksrini
parents: 15523
diff changeset
   651
    v->add("\\\\?", TRUE);
04271182b2c1 8007333: [launcher] removes multiple back slashes
ksrini
parents: 15523
diff changeset
   652
    vectors[i++] = v;
04271182b2c1 8007333: [launcher] removes multiple back slashes
ksrini
parents: 15523
diff changeset
   653
04271182b2c1 8007333: [launcher] removes multiple back slashes
ksrini
parents: 15523
diff changeset
   654
    v= new Vector(argv[0], "\\\\*");
04271182b2c1 8007333: [launcher] removes multiple back slashes
ksrini
parents: 15523
diff changeset
   655
    v->add("\\\\*", TRUE);
04271182b2c1 8007333: [launcher] removes multiple back slashes
ksrini
parents: 15523
diff changeset
   656
    vectors[i++] = v;
04271182b2c1 8007333: [launcher] removes multiple back slashes
ksrini
parents: 15523
diff changeset
   657
13410
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   658
    dotest(vectors);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   659
    printf("All tests pass [%d]\n", i);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   660
    doexit(0);
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   661
}
e667545511c7 7188114: (launcher) need an alternate command line parser for Windows
ksrini
parents:
diff changeset
   662
#endif /* IDE_STANDALONE */