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