ucspi-ssl  0.99e
TLS encryption for IPv6 communication
subgetopt.c
Go to the documentation of this file.
1 /* Public domain. */
2 
3 #define SUBGETOPTNOSHORT
4 #include "subgetopt.h"
5 
6 #define sgopt subgetopt
7 #define optind subgetoptind
8 #define optpos subgetoptpos
9 #define optarg subgetoptarg
10 #define optproblem subgetoptproblem
11 #define optdone subgetoptdone
12 
13 int optind = 1;
14 int optpos = 0;
15 const char *optarg = 0;
16 int optproblem = 0;
18 
19 int sgopt(int argc,char *const *argv,const char *opts)
20 {
21  int c;
22  const char *s;
23 
24  optarg = 0;
25  if (!argv || (optind >= argc) || !argv[optind]) return optdone;
26  if (optpos && !argv[optind][optpos]) {
27  ++optind;
28  optpos = 0;
29  if ((optind >= argc) || !argv[optind]) return optdone;
30  }
31  if (!optpos) {
32  if (argv[optind][0] != '-') return optdone;
33  ++optpos;
34  c = argv[optind][1];
35  if ((c == '-') || (c == 0)) {
36  if (c) ++optind;
37  optpos = 0;
38  return optdone;
39  }
40  /* otherwise c is reassigned below */
41  }
42  c = argv[optind][optpos];
43  ++optpos;
44  s = opts;
45  while (*s) {
46  if (c == *s) {
47  if (s[1] == ':') {
48  optarg = argv[optind] + optpos;
49  ++optind;
50  optpos = 0;
51  if (!*optarg) {
52  optarg = argv[optind];
53  if ((optind >= argc) || !optarg) { /* argument past end */
54  optproblem = c;
55  return '?';
56  }
57  ++optind;
58  }
59  }
60  return c;
61  }
62  ++s;
63  if (*s == ':') ++s;
64  }
65  optproblem = c;
66  return '?';
67 }
#define optind
Definition: subgetopt.c:7
#define SUBGETOPTDONE
Definition: subgetopt.h:16
#define optproblem
Definition: subgetopt.c:10
#define optpos
Definition: subgetopt.c:8
#define sgopt
Definition: subgetopt.c:6
#define optdone
Definition: subgetopt.c:11
#define optarg
Definition: subgetopt.c:9