mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
New version handles -o<string> same as -o <string>
This commit is contained in:
parent
a83d954912
commit
871b805a04
1 changed files with 62 additions and 31 deletions
|
@ -1,12 +1,36 @@
|
||||||
/* An implementation of getopt() by Amrit Prem */
|
/*---------------------------------------------------------------------------*
|
||||||
|
* <RCS keywords>
|
||||||
|
*
|
||||||
|
* C++ Library
|
||||||
|
*
|
||||||
|
* Copyright 1992-1994, David Gottner
|
||||||
|
*
|
||||||
|
* All Rights Reserved
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
|
* documentation for any purpose and without fee is hereby granted,
|
||||||
|
* provided that the above copyright notice, this permission notice and
|
||||||
|
* the following disclaimer notice appear unmodified in all copies.
|
||||||
|
*
|
||||||
|
* I DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL I
|
||||||
|
* BE LIABLE FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
|
||||||
|
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||||
|
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*
|
||||||
|
* Nevertheless, I would like to know about bugs in this library or
|
||||||
|
* suggestions for improvment. Send bug reports and feedback to
|
||||||
|
* davegottner@delphi.com.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define bool int
|
#define bool int
|
||||||
#define TRUE 1
|
#define TRUE 1
|
||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
#define EOS '\0'
|
|
||||||
|
|
||||||
bool opterr = TRUE; /* generate error messages */
|
bool opterr = TRUE; /* generate error messages */
|
||||||
int optind = 1; /* index into argv array */
|
int optind = 1; /* index into argv array */
|
||||||
|
@ -15,40 +39,47 @@ char * optarg = NULL; /* optional argument */
|
||||||
|
|
||||||
int getopt(int argc, char *argv[], const char optstring[])
|
int getopt(int argc, char *argv[], const char optstring[])
|
||||||
{
|
{
|
||||||
static char *opt_ptr = "";
|
static char *opt_ptr = "";
|
||||||
register char *ptr;
|
register char *ptr;
|
||||||
int option;
|
int option;
|
||||||
|
|
||||||
if (*opt_ptr == EOS) {
|
if (*opt_ptr == '\0') {
|
||||||
|
|
||||||
if (optind >= argc || argv[optind][0] != '-')
|
if (optind >= argc || argv[optind][0] != '-')
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
else if (strcmp(argv[optind], "--") == 0) {
|
else if (strcmp(argv[optind], "--") == 0) {
|
||||||
++optind;
|
++optind;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
opt_ptr = argv[optind++] + 1;
|
opt_ptr = &argv[optind++][1];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ptr = strchr(optstring, option = *opt_ptr++)) == NULL) {
|
if ((ptr = strchr(optstring, option = *opt_ptr++)) == NULL) {
|
||||||
if (opterr)
|
if (opterr)
|
||||||
fprintf(stderr, "Unknown option: -%c\n", option);
|
fprintf(stderr, "Unknown option: -%c\n", option);
|
||||||
|
|
||||||
return '?';
|
return '?';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*(ptr + 1) == ':') {
|
if (*(ptr + 1) == ':') {
|
||||||
if (optind >= argc) {
|
if (*opt_ptr != '\0') {
|
||||||
if (opterr)
|
optarg = opt_ptr;
|
||||||
fprintf(stderr, "Argument expected for the -%c option\n", option);
|
opt_ptr = "";
|
||||||
|
}
|
||||||
|
|
||||||
return '?';
|
else {
|
||||||
}
|
if (optind >= argc) {
|
||||||
|
if (opterr)
|
||||||
|
fprintf(stderr,
|
||||||
|
"Argument expected for the -%c option\n", option);
|
||||||
|
return '?';
|
||||||
|
}
|
||||||
|
|
||||||
optarg = argv[optind++];
|
optarg = argv[optind++];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return option;
|
return option;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue