posix: getopt: move declarations to unistd.h
Declarations for `getopt()` should be in `<unistd.h>`
according to the spec. The extended versions `getopt_long()`
and `getopt_long_only()` are declared in `<getopt.h>`.
Signed-off-by: Chris Friedt <cfriedt@meta.com>
diff --git a/include/zephyr/posix/unistd.h b/include/zephyr/posix/unistd.h
index 3857f13..e2e8fdd 100644
--- a/include/zephyr/posix/unistd.h
+++ b/include/zephyr/posix/unistd.h
@@ -43,6 +43,12 @@
#endif /* CONFIG_POSIX_API */
+#ifdef CONFIG_GETOPT
+int getopt(int argc, char *const argv[], const char *optstring);
+extern char *optarg;
+extern int opterr, optind, optopt;
+#endif
+
unsigned sleep(unsigned int seconds);
int usleep(useconds_t useconds);
diff --git a/lib/os/crc_shell.c b/lib/os/crc_shell.c
index 6b6125d..e75d886 100644
--- a/lib/os/crc_shell.c
+++ b/lib/os/crc_shell.c
@@ -5,10 +5,14 @@
*/
#include <errno.h>
-#include <getopt.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
+#ifdef CONFIG_ARCH_POSIX
+#include <unistd.h>
+#else
+#include <zephyr/posix/unistd.h>
+#endif
#include <zephyr/kernel.h>
#include <zephyr/shell/shell.h>
@@ -71,7 +75,6 @@
enum crc_type type = CRC32_IEEE;
optind = 1;
- optreset = 1;
while ((rv = getopt(argc, argv, "fhlp:rs:t:")) != -1) {
switch (rv) {
diff --git a/lib/posix/getopt/getopt.c b/lib/posix/getopt/getopt.c
index f1d5c8e..514af72 100644
--- a/lib/posix/getopt/getopt.c
+++ b/lib/posix/getopt/getopt.c
@@ -30,6 +30,11 @@
*/
#include <string.h>
+#ifdef CONFIG_ARCH_POSIX
+#include <unistd.h>
+#else
+#include <zephyr/posix/unistd.h>
+#endif
#include "getopt.h"
#include "getopt_common.h"
diff --git a/lib/posix/getopt/getopt.h b/lib/posix/getopt/getopt.h
index 0cbdda6..4dfcc8b 100644
--- a/lib/posix/getopt/getopt.h
+++ b/lib/posix/getopt/getopt.h
@@ -28,11 +28,7 @@
#endif
};
-extern int opterr; /* if error message should be printed */
-extern int optind; /* index into parent argv vector */
-extern int optopt; /* character checked for validity */
extern int optreset; /* reset getopt */
-extern char *optarg; /* argument associated with option */
#define no_argument 0
#define required_argument 1
@@ -61,27 +57,6 @@
/**
* @brief Parses the command-line arguments.
*
- * It is based on FreeBSD implementation.
- *
- * @param[in] argc Arguments count.
- * @param[in] argv Arguments.
- * @param[in] options String containing the legitimate option characters.
- *
- * @return If an option was successfully found, function returns
- * the option character.
- * @return If options have been detected that is not in @p options
- * function will return '?'.
- * If function encounters an option with a missing
- * argument, then the return value depends on the first
- * character in optstring: if it is ':', then ':' is
- * returned; otherwise '?' is returned.
- * @return -1 If all options have been parsed.
- */
-int getopt(int nargc, char *const nargv[], const char *ostr);
-
-/**
- * @brief Parses the command-line arguments.
- *
* The getopt_long() function works like @ref getopt() except
* it also accepts long options, started with two dashes.
*
diff --git a/samples/subsys/shell/shell_module/src/main.c b/samples/subsys/shell/shell_module/src/main.c
index 41275a8..b78490d 100644
--- a/samples/subsys/shell/shell_module/src/main.c
+++ b/samples/subsys/shell/shell_module/src/main.c
@@ -13,6 +13,12 @@
#include <zephyr/usb/usb_device.h>
#include <ctype.h>
+#ifdef CONFIG_ARCH_POSIX
+#include <unistd.h>
+#else
+#include <zephyr/posix/unistd.h>
+#endif
+
LOG_MODULE_REGISTER(app);
extern void foo(void);