[Libguestfs] [PATCH libguestfs 2/5] guestfish: write --help to stdout, use gnulib's progname module

Jim Meyering jim at meyering.net
Mon Aug 24 16:16:06 UTC 2009


Richard W.M. Jones wrote:
> On Mon, Aug 24, 2009 at 06:00:19PM +0200, Jim Meyering wrote:
>> @@ -186,6 +201,11 @@ main (int argc, char *argv[])
>>        (argv[0][0] != '/' || strstr (argv[0], "/.libs/lt-") != NULL))
>>      guestfs_set_path (g, "appliance:" GUESTFS_DEFAULT_PATH);
>>
>> +  /* getopt_long uses argv[0], so give it the sanitized name, too.
>> +     But only temporarily.  */
>> +  char *real_argv0 = argv[0];
>> +  argv[0] = bad_cast (program_name);
>
> ACK.  Do you think you could change that comment to make it really
> clear that this piece of code mustn't ever move above the path munging
> done in the preceeding lines.

Sure.  Here's the incremental:

diff --git a/fish/fish.c b/fish/fish.c
index e799f86..91c5dad 100644
--- a/fish/fish.c
+++ b/fish/fish.c
@@ -201,8 +201,12 @@ main (int argc, char *argv[])
       (argv[0][0] != '/' || strstr (argv[0], "/.libs/lt-") != NULL))
     guestfs_set_path (g, "appliance:" GUESTFS_DEFAULT_PATH);

-  /* getopt_long uses argv[0], so give it the sanitized name, too.
-     But only temporarily.  */
+  /* CAUTION: we are careful to modify argv[0] here, only after
+   * using it just above.
+   *
+   * getopt_long uses argv[0], so give it the sanitized name.  Save a copy
+   * of the original, in case it's needed in virt-inspector mode, below.
+   */
   char *real_argv0 = argv[0];
   argv[0] = bad_cast (program_name);




More information about the Libguestfs mailing list