Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

78 lines
1.6 KiB

/* got this off net.sources */
#include <stdio.h>
#include <string.h>
#include "getopt.h"
/*
* get option letter from argument vector
*/
int
opterr = 1, // should error messages be printed?
optind = 1, // index into parent argv vector
optopt; // character checked for validity
char
*optarg; // argument associated with option
#define EMSG ""
char *progname; // may also be defined elsewhere
static void
error(char *pch)
{
if (!opterr) {
return; // without printing
}
fprintf(stderr, "%s: %s: %c\n",
(NULL != progname) ? progname : "getopt", pch, optopt);
}
int
getopt(int argc, char **argv, char *ostr)
{
static char *place = EMSG; /* option letter processing */
register char *oli; /* option letter list index */
if (!*place) {
// update scanning pointer
if (optind >= argc || *(place = argv[optind]) != '-' || !*++place) {
return EOF;
}
if (*place == '-') {
// found "--"
++optind;
return EOF;
}
}
/* option letter okay? */
if ((optopt = (int)*place++) == (int)':'
|| !(oli = strchr(ostr, optopt))) {
if (!*place) {
++optind;
}
error("illegal option");
return BADCH;
}
if (*++oli != ':') {
/* don't need argument */
optarg = NULL;
if (!*place)
++optind;
} else {
/* need an argument */
if (*place) {
optarg = place; /* no white space */
} else if (argc <= ++optind) {
/* no arg */
place = EMSG;
error("option requires an argument");
return BADCH;
} else {
optarg = argv[optind]; /* white space */
}
place = EMSG;
++optind;
}
return optopt; // return option letter
}