Don't print the client's argv[i] if it's null, and related changes.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4629 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/cachegrind/cg_main.c b/cachegrind/cg_main.c
index 9897056..084bd9d 100644
--- a/cachegrind/cg_main.c
+++ b/cachegrind/cg_main.c
@@ -896,10 +896,10 @@
    VG_(strcpy)(buf, "cmd:");
    VG_(write)(fd, (void*)buf, VG_(strlen)(buf));
    for (i = 0; i < VG_(client_argc); i++) {
-       if (VG_(client_argv)[i] == NULL)
-          continue;
-       VG_(write)(fd, " ", 1);
-       VG_(write)(fd, VG_(client_argv)[i], VG_(strlen)(VG_(client_argv)[i]));
+       if (VG_(client_argv)[i]) {
+          VG_(write)(fd, " ", 1);
+          VG_(write)(fd, VG_(client_argv)[i], VG_(strlen)(VG_(client_argv)[i]));
+       }
    }
    // "events:" line
    VG_(sprintf)(buf, "\nevents: Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw\n");
diff --git a/include/pub_tool_libcproc.h b/include/pub_tool_libcproc.h
index e8588f5..b4e0080 100644
--- a/include/pub_tool_libcproc.h
+++ b/include/pub_tool_libcproc.h
@@ -35,7 +35,9 @@
    Command-line and environment stuff
    ------------------------------------------------------------------ */
 
-/* Client args and environment (which can be inspected with VG_(getenv)(). */
+/* Client args and environment.  Note that VG_(client_argv)[] can be written
+   to by the client, so you should check each entry is non-NULL before
+   printing.  VG_(client_envp) can be inspected with VG_(getenv)(). */
 extern Int    VG_(client_argc);
 extern Char** VG_(client_argv);
 extern Char** VG_(client_envp);
diff --git a/massif/ms_main.c b/massif/ms_main.c
index d4d2b6b..9a2ae7e 100644
--- a/massif/ms_main.c
+++ b/massif/ms_main.c
@@ -1341,8 +1341,10 @@
 
    // File header, including command line
    SPRINTF(buf, "JOB         \"");
-   for (i = 0; i < VG_(client_argc); i++)
-      SPRINTF(buf, "%s ", VG_(client_argv)[i]);
+   for (i = 0; i < VG_(client_argc); i++) {
+      if (VG_(client_argv)[i])
+         SPRINTF(buf, "%s ", VG_(client_argv)[i]);
+   }
    SPRINTF(buf, /*" (%d ms/sample)\"\n"*/ "\"\n"
                 "DATE        \"\"\n"
                 "SAMPLE_UNIT \"ms\"\n"
@@ -1664,8 +1666,10 @@
 
    // Command line
    SPRINTF(buf, "Command: ");
-   for (i = 0; i < VG_(client_argc); i++)
-      SPRINTF(buf, "%s ", VG_(client_argv)[i]);
+   for (i = 0; i < VG_(client_argc); i++) {
+      if (VG_(client_argv)[i])
+         SPRINTF(buf, "%s ", VG_(client_argv)[i]);
+   }
    SPRINTF(buf, "\n%s\n", maybe_p);
 
    if (clo_heap)