ReactOS  0.4.14-dev-297-g23e575c
getopt.c
Go to the documentation of this file.
1 /* getopt.c
2  *
3  * Copyright (c) 1992-2001 by Mike Gleason.
4  * All rights reserved.
5  *
6  */
7 
8 #include <stdio.h>
9 #include <string.h>
10 
11 #include "getopt.h"
12 
13 int gOptErr = 1; /* if error message should be printed */
14 int gOptInd = 1; /* index into parent argv vector */
15 int gOptOpt; /* character checked for validity */
16 const char *gOptArg; /* argument associated with option */
17 const char *gOptPlace = kGetoptErrMsg; /* saved position in an arg */
18 
19 /* This must be called before each Getopt. */
20 void
22 {
23  gOptInd = 1;
25 } /* GetoptReset */
26 
27 
28 
29 
30 static char *
31 NextOption(const char *const ostr)
32 {
33  if ((gOptOpt = (int) *gOptPlace++) == (int) ':')
34  return 0;
35  return strchr(ostr, gOptOpt);
36 } /* NextOption */
37 
38 
39 
40 
41 int
42 Getopt(int nargc, const char **const nargv, const char *const ostr)
43 {
44  const char *oli; /* Option letter list index */
45 
46  if (!*gOptPlace) { /* update scanning pointer */
47  if (gOptInd >= nargc || *(gOptPlace = nargv[gOptInd]) != '-')
48  return (EOF);
49  if (gOptPlace[1] && *++gOptPlace == '-') { /* found "--" */
50  ++gOptInd;
51  return (EOF);
52  }
53  } /* Option letter okay? */
54  oli = NextOption(ostr);
55  if (oli == NULL) {
56  if (!*gOptPlace)
57  ++gOptInd;
58  if (gOptErr)
59  (void) fprintf(stderr, "%s%s%c\n", *nargv, ": illegal option -- ", gOptOpt);
60  return(kGetoptBadChar);
61  }
62  if (*++oli != ':') { /* don't need argument */
63  gOptArg = NULL;
64  if (!*gOptPlace)
65  ++gOptInd;
66  } else { /* need an argument */
67  if (*gOptPlace) /* no white space */
69  else if (nargc <= ++gOptInd) { /* no arg */
71  if (gOptErr)
72  (void) fprintf(stderr, "%s%s%c\n", *nargv, ": option requires an argument -- ", gOptOpt);
73  return(kGetoptBadChar);
74  } else /* white space */
75  gOptArg = nargv[gOptInd];
77  ++gOptInd;
78  }
79  return (gOptOpt); /* dump back Option letter */
80 } /* Getopt */
81 
82 /* eof */
const char * gOptPlace
Definition: getopt.c:17
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
int gOptErr
Definition: getopt.c:13
const char * gOptArg
Definition: getopt.c:16
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
void GetoptReset(void)
Definition: getopt.c:21
smooth NULL
Definition: ftsmooth.c:416
int gOptOpt
Definition: getopt.c:15
#define kGetoptBadChar
Definition: getopt.h:8
#define kGetoptErrMsg
Definition: getopt.h:9
int Getopt(int nargc, const char **const nargv, const char *const ostr)
Definition: getopt.c:42
char * strchr(const char *String, int ch)
Definition: utclib.c:501
#define EOF
Definition: stdio.h:24
FILE * stderr
static char * NextOption(const char *const ostr)
Definition: getopt.c:31
int gOptInd
Definition: getopt.c:14