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/