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

Richard W.M. Jones rjones at redhat.com
Mon Aug 24 12:11:31 UTC 2009


On Mon, Aug 24, 2009 at 01:51:18PM +0200, Jim Meyering wrote:
> @@ -205,6 +202,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 *argv0 = argv[0];
> +  argv[0] = bad_cast (program_name);
> +
>    for (;;) {
>      c = getopt_long (argc, argv, options, long_options, &option_index);
>      if (c == -1) break;

> @@ -325,6 +327,9 @@ main (int argc, char *argv[])
>      }
>    }
> 
> +  /* Restore original value.  */
> +  argv[0] = argv0;
> +
>    /* Inspector mode invalidates most of the other arguments. */
>    if (inspector) {
>      char cmd[1024];

I'm maybe missing something, but why restore it?

How about instead something like:

char *real_argv0 = argv[0];
argv[0] = bad_cast (program_name);

 //...

/* change the path-munging code to use real_argv0 */

 //...

/* don't bother restoring argv[0] */

?

Rich.

-- 
Richard Jones, Emerging Technologies, Red Hat  http://et.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://et.redhat.com/~rjones/virt-df/




More information about the Libguestfs mailing list