about summary refs log tree commit diff
path: root/src/misc/getopt_long.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2015-01-21 13:16:15 -0500
committerRich Felker <dalias@aerifal.cx>2015-01-21 13:16:15 -0500
commite8e4e56a8ce1f3d7e4a027ff5478f2f8ea70c46b (patch)
tree53964a94a44433ba9eb5c1684c79c961c6ceda38 /src/misc/getopt_long.c
parent78a8ef47c4d92b7680c52a85f80a81e29da86bb9 (diff)
downloadmusl-e8e4e56a8ce1f3d7e4a027ff5478f2f8ea70c46b.tar.gz
musl-e8e4e56a8ce1f3d7e4a027ff5478f2f8ea70c46b.tar.xz
musl-e8e4e56a8ce1f3d7e4a027ff5478f2f8ea70c46b.zip
always set optarg in getopt_long
the standard getopt does not touch optarg unless processing an option
with an argument. however, programs using the GNU getopt API, which we
attempt to provide in getopt_long, expect optarg to be a null pointer
after processing an option without an argument.

before argument permutation support was added, such programs typically
detected its absence and used their own replacement getopt_long,
masking the discrepency in behavior.
Diffstat (limited to 'src/misc/getopt_long.c')
-rw-r--r--src/misc/getopt_long.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/misc/getopt_long.c b/src/misc/getopt_long.c
index ffbcd423..bee77f43 100644
--- a/src/misc/getopt_long.c
+++ b/src/misc/getopt_long.c
@@ -51,7 +51,7 @@ static int __getopt_long(int argc, char *const *argv, const char *optstring, con
 
 static int __getopt_long_core(int argc, char *const *argv, const char *optstring, const struct option *longopts, int *idx, int longonly)
 {
-
+	optarg = 0;
 	if (longopts && argv[optind][0] == '-' &&
 		((longonly && argv[optind][1]) ||
 		 (argv[optind][1] == '-' && argv[optind][2])))