Initial work
This commit is contained in:
commit
3222551702
374 changed files with 40290 additions and 0 deletions
76
external/android-emugl/host/tools/emugen/getopt.c
vendored
Normal file
76
external/android-emugl/host/tools/emugen/getopt.c
vendored
Normal file
|
|
@ -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;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue