Rizin
unix-like reverse engineering framework and cli tools
getopt.h
Go to the documentation of this file.
1 #include <string.h>
2 #include <stdio.h>
3 
4 // global
5 int opterr = 1, /* if error message should be printed */
6 optind = 1, /* index into parent argv vector */
7 optopt, /* character checked for validity */
8 optreset; /* reset getopt */
9 const char *optarg; /* argument associated with option */
10 
11 #define BADCH (int)'?'
12 #define BADARG (int)':'
13 #define EMSG ""
14 
15 /*
16  * getopt --
17  * Parse argc/argv argument vector.
18  */
19 int
20 getopt (int nargc, char * const nargv[], const char *ostr)
21 {
22  static const char *place = EMSG; /* option letter processing */
23  const char *oli; /* option letter list index */
24 
25  if (optreset || !*place) { /* update scanning pointer */
26  optreset = 0;
27  if (optind >= nargc || *(place = nargv[optind]) != '-') {
28  place = EMSG;
29  return (-1);
30  }
31  if (place[1] && *++place == '-') { /* found "--" */
32  ++optind;
33  place = EMSG;
34  return (-1);
35  }
36  } /* option letter okay? */
37  if ((optopt = (int)*place++) == (int)':' ||
38  !(oli = strchr (ostr, optopt))) {
39  /*
40  * if the user didn't specify '-' as an option,
41  * assume it means -1.
42  */
43  if (optopt == (int)'-')
44  return (-1);
45  if (!*place)
46  ++optind;
47  if (opterr && *ostr != ':')
48  (void)printf ("illegal option -- %c\n", optopt);
49  return (BADCH);
50  }
51  if (*++oli != ':') { /* don't need argument */
52  optarg = NULL;
53  if (!*place)
54  ++optind;
55  }
56  else { /* need an argument */
57  if (*place) /* no white space */
58  optarg = place;
59  else if (nargc <= ++optind) { /* no arg */
60  place = EMSG;
61  if (*ostr == ':')
62  return (BADARG);
63  if (opterr)
64  (void)printf ("option requires an argument -- %c\n", optopt);
65  return (BADCH);
66  }
67  else /* white space */
68  optarg = nargv[optind];
69  place = EMSG;
70  ++optind;
71  }
72  return optopt; /* dump back option letter */
73 }
#define BADCH
Definition: getopt.h:11
int getopt(int nargc, char *const nargv[], const char *ostr)
Definition: getopt.h:20
int optopt
Definition: getopt.h:7
int optreset
Definition: getopt.h:8
#define BADARG
Definition: getopt.h:12
#define EMSG
Definition: getopt.h:13
const char * optarg
Definition: getopt.h:9
int optind
Definition: getopt.h:6
int opterr
Definition: getopt.h:5
#define NULL
Definition: cris-opc.c:27
_Use_decl_annotations_ int __cdecl printf(const char *const _Format,...)
Definition: cs_driver.c:93