jdk/src/java.base/share/native/libjli/java.c
changeset 43330 6aa5f2938b75
parent 43325 033e4cced1dc
child 43498 fd3e0590219e
--- a/jdk/src/java.base/share/native/libjli/java.c	Fri Jan 27 16:27:52 2017 +0000
+++ b/jdk/src/java.base/share/native/libjli/java.c	Fri Jan 27 13:10:27 2017 -0800
@@ -1566,6 +1566,31 @@
     return (*env)->CallStaticObjectMethod(env, cls, mid);
 }
 
+static char* expandWildcardOnLongOpt(char* arg) {
+    char *p, *value;
+    size_t optLen, valueLen;
+    p = JLI_StrChr(arg, '=');
+
+    if (p == NULL || p[1] == '\0') {
+        JLI_ReportErrorMessage(ARG_ERROR1, arg);
+        exit(1);
+    }
+    p++;
+    value = (char *) JLI_WildcardExpandClasspath(p);
+    if (p == value) {
+        // no wildcard
+        return arg;
+    }
+
+    optLen = p - arg;
+    valueLen = JLI_StrLen(value);
+    p = JLI_MemAlloc(optLen + valueLen + 1);
+    memcpy(p, arg, optLen);
+    memcpy(p + optLen, value, valueLen);
+    p[optLen + valueLen + 1] = '\0';
+    return p;
+}
+
 /*
  * For tools, convert command line args thus:
  *   javac -cp foo:foo/"*" -J-ms32m ...
@@ -1616,14 +1641,17 @@
         if (arg[0] == '-') {
             if (arg[1] == 'J')
                 continue;
-            if (IsWildCardEnabled() && arg[1] == 'c'
-                && (JLI_StrCmp(arg, "-cp") == 0 ||
-                    JLI_StrCmp(arg, "-classpath") == 0)
-                && i < argc - 1) {
-                *nargv++ = arg;
-                *nargv++ = (char *) JLI_WildcardExpandClasspath(argv[i+1]);
-                i++;
-                continue;
+            if (IsWildCardEnabled()) {
+                if (IsClassPathOption(arg) && i < argc - 1) {
+                    *nargv++ = arg;
+                    *nargv++ = (char *) JLI_WildcardExpandClasspath(argv[i+1]);
+                    i++;
+                    continue;
+                }
+                if (JLI_StrCCmp(arg, "--class-path=") == 0) {
+                    *nargv++ = expandWildcardOnLongOpt(arg);
+                    continue;
+                }
             }
         }
         *nargv++ = arg;