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