TYPE3
[iec.git] / src / type3_AndroidCloud / anbox-master / external / android-emugl / host / tools / emugen / getopt.c
diff --git a/src/type3_AndroidCloud/anbox-master/external/android-emugl/host/tools/emugen/getopt.c b/src/type3_AndroidCloud/anbox-master/external/android-emugl/host/tools/emugen/getopt.c
new file mode 100644 (file)
index 0000000..3523538
--- /dev/null
@@ -0,0 +1,76 @@
+#include "getopt.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#define  _getprogname() nargv[0]
+
+int opterr = 1;
+int optind = 1;
+int optopt = 0;
+char* optarg;
+
+int getopt(int argc, char* const argv[], const char* ostr) {
+    static const char kEmpty[] = "";
+    static const char* place = kEmpty;
+    if (!*place) {
+        if (optind >= argc)
+            return -1;
+
+        const char* arg = argv[optind];
+        if (arg[0] != '-') {
+            // Not an option.
+            return -1;
+        }
+        if (arg[1] == '-' && !arg[2]) {
+            // '--' -> end of options.
+            return -1;
+        }
+        if (!arg[1]) {
+            // Single '-', If the program wants it, treat it as an option.
+            // Otherwise, it's the end of options.
+            if (!strchr(ostr, '-')) {
+                return -1;
+            }
+            optopt = '-';
+            place = arg + 1;
+        } else {
+            optopt = arg[1];
+            place = arg + 2;
+        }
+    };
+
+    char* oindex = strchr(ostr, optopt);
+    if (!oindex) {
+        // Unsupported option.
+        (void)fprintf(stderr, "%s: illegal option -- %c\n", argv[0]);
+        return '?';
+    }
+    if (oindex[1] != ':') {
+        // No argument needed.
+        optarg = NULL;
+        if (!*place)
+            optind++;
+        return optopt;
+    }
+
+    // This option needs an argument. Either after the option character,
+    // or the argument that follows.
+    if (*place) {
+        optarg = (char *)place;
+    } else if (argc > ++optind) {
+        optarg = (char *)argv[optind];
+    } else if (oindex[2] == ':') {
+        // Optional argument is missing.
+        place = kEmpty;
+        optarg = NULL;
+        return optopt;
+    } else {
+        // Missing argument.
+        place = kEmpty;
+        (void)fprintf(stderr, "%s: option requires an argument --%c\n",
+                      argv[0], optopt);
+        return ':';
+    }
+    return optopt;
+}