Commit 9d042171749b94510b071c9e800ed0d2a4e95bb9

Guillem Jover 2011-05-25T07:38:36

Map getopt to bsd_getopt if we are using the overlay This will ensure the code can safely and correctly use optreset transparently.

diff --git a/include/bsd/getopt.h b/include/bsd/getopt.h
index d2963cb..ba2c4eb 100644
--- a/include/bsd/getopt.h
+++ b/include/bsd/getopt.h
@@ -39,6 +39,11 @@
 __BEGIN_DECLS
 extern int optreset;
 
+#ifdef LIBBSD_OVERLAY
+#undef getopt
+#define getopt(argc, argv, optstr) bsd_getopt(argc, argv, optstr)
+#endif
+
 int bsd_getopt (int, char **, char *);
 __END_DECLS
 
diff --git a/src/bsd_getopt.c b/src/bsd_getopt.c
index f5fb304..3e89817 100644
--- a/src/bsd_getopt.c
+++ b/src/bsd_getopt.c
@@ -36,5 +36,9 @@ bsd_getopt(int argc, char **argv, char *shortopts)
 		optind = 0;
 	}
 
-	return getopt(argc, argv, shortopts);
+	/*
+	 * Make sure we are using the system getopt() and not a possible
+	 * overlay macro.
+	 */
+	return (getopt)(argc, argv, shortopts);
 }