changeset 7977:9097b6ec0ecd

8002091: tools/launcher/ToolsOpts.java test started to fail since 7u11 b01 on Windows Reviewed-by: darcy, jjh, mschoene
author ksrini
date Fri, 09 Nov 2012 14:36:10 -0800
parents 69fd15e0437d
children 7bc8d5a63d9e
files src/share/bin/jli_util.h src/windows/bin/java_md.c test/tools/launcher/ToolsOpts.java
diffstat 3 files changed, 26 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/bin/jli_util.h	Thu Nov 08 15:41:01 2012 -0800
+++ b/src/share/bin/jli_util.h	Fri Nov 09 14:36:10 2012 -0800
@@ -66,7 +66,7 @@
 #include <io.h>
 #define JLI_StrCaseCmp(p1, p2)          stricmp((p1), (p2))
 #define JLI_StrNCaseCmp(p1, p2, p3)     strnicmp((p1), (p2), (p3))
-size_t  JLI_Snprintf(char *buffer, size_t size, const char *format, ...);
+int  JLI_Snprintf(char *buffer, size_t size, const char *format, ...);
 void JLI_CmdToArgs(char *cmdline);
 #define JLI_Lseek                       _lseeki64
 #else  /* NIXES */
--- a/src/windows/bin/java_md.c	Thu Nov 08 15:41:01 2012 -0800
+++ b/src/windows/bin/java_md.c	Fri Nov 09 14:36:10 2012 -0800
@@ -526,27 +526,35 @@
     }
     return (counts * 1000 * 1000)/counterFrequency.QuadPart;
 }
-
 /*
  * windows snprintf does not guarantee a null terminator in the buffer,
  * if the computed size is equal to or greater than the buffer size,
- * as well as error conditions, this function guarantees a null terminator
- * under all these conditions. An unreasonable buffer size will return
- * an error value.
+ * as well as error conditions. This function guarantees a null terminator
+ * under all these conditions. An unreasonable buffer or size will return
+ * an error value. Under all other conditions this function will return the
+ * size of the bytes actually written minus the null terminator, similar
+ * to ansi snprintf api. Thus when calling this function the caller must
+ * ensure storage for the null terminator.
  */
-size_t
-JLI_Snprintf(char* buffer, size_t size, const char* format, ...)
-{
-    size_t rc;
+int
+JLI_Snprintf(char* buffer, size_t size, const char* format, ...) {
+    int rc;
     va_list vl;
-    if (size <= 0)
+    if (size == 0 || buffer == NULL)
         return -1;
+    buffer[0] = '\0';
     va_start(vl, format);
-    rc = vsnprintf(buffer, size - 1, format, vl);
+    rc = vsnprintf(buffer, size, format, vl);
+    va_end(vl);
     /* force a null terminator, if something is amiss */
-    if (rc < 0 || rc >= size)
+    if (rc < 0) {
+        /* apply ansi semantics */
         buffer[size - 1] = '\0';
-    va_end(vl);
+        return size;
+    } else if (rc == size) {
+        /* force a null terminator */
+        buffer[size - 1] = '\0';
+    }
     return rc;
 }
 
@@ -1441,7 +1449,10 @@
         // we add the indicator
         tlen = 1 + JLI_StrLen(strv[i]) + 1;
         nargv[i] = (char *) JLI_MemAlloc(tlen);
-        JLI_Snprintf(nargv[i], tlen, "%c%s", arg_expand ? 'T' : 'F', strv[i]);
+        if (JLI_Snprintf(nargv[i], tlen, "%c%s", arg_expand ? 'T' : 'F',
+                         strv[i]) < 0) {
+            return NULL;
+        }
         JLI_TraceLauncher("%s\n", nargv[i]);
     }
 
--- a/test/tools/launcher/ToolsOpts.java	Thu Nov 08 15:41:01 2012 -0800
+++ b/test/tools/launcher/ToolsOpts.java	Fri Nov 09 14:36:10 2012 -0800
@@ -23,6 +23,7 @@
 
 /*
  * @test
+ * @bug 8002091
  * @summary Test options patterns for javac,javah,javap and javadoc using
  * javac as a test launcher. Create a dummy javac and intercept options to check
  * reception of options as passed through the launcher without having to launch