about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-11-08 18:16:42 -0500
committerJune McEnroe <june@causal.agency>2019-11-08 18:16:42 -0500
commitca22cbfab650ad9def1310f459d5003975a0912b (patch)
tree6660befce2045f6aea8b5f7386eb8b1188471c72
parentOnly change AWAY status for registered clients (diff)
downloadpounce-ca22cbfab650ad9def1310f459d5003975a0912b.tar.gz
pounce-ca22cbfab650ad9def1310f459d5003975a0912b.zip
Avoid calling getopt_long again after it returns -1
On GNU, calling getopt_long again will reset optind back to the first
non-option argument, which would cause an infinite loop of reading the
same configurtion file forever.
-rw-r--r--config.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/config.c b/config.c
index a96cbb6..653ae16 100644
--- a/config.c
+++ b/config.c
@@ -42,7 +42,10 @@ int getopt_config(
 	int argc, char *const *argv,
 	const char *optstring, const struct option *longopts, int *longindex
 ) {
-	int opt = getopt_long(argc, argv, optstring, longopts, longindex);
+	static int opt;
+	if (opt >= 0) {
+		opt = getopt_long(argc, argv, optstring, longopts, longindex);
+	}
 	if (opt >= 0) return opt;
 
 	for (;;) {