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);