mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-05 16:43:52 +01:00
Move library tree where it belongs
This commit is contained in:
157
lib-src/libraptor/utils/getopt.c
Normal file
157
lib-src/libraptor/utils/getopt.c
Normal file
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
* Public Domain getopt - history below
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* From: gwyn@brl-tgr.ARPA (Doug Gwyn <gwyn>) Newsgroups: net.sources
|
||||
* Subject: getopt library routine Date: 30 Mar 85 04:45:33 GMT
|
||||
*/
|
||||
|
||||
/*
|
||||
* getopt -- public domain version of standard System V routine
|
||||
*
|
||||
* Strictly enforces the System V Command Syntax Standard; provided by D A
|
||||
* Gwyn of BRL for generic ANSI C implementations
|
||||
*
|
||||
* #define STRICT to prevent acceptance of clustered options with arguments
|
||||
* and ommision of whitespace between option and arg.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by Manuel Novoa III on 1/5/01 to use weak symbols.
|
||||
* Programs needing long options will link gnu_getopt instead.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Last public domain version 1.5 downloaded from uclibc CVS:
|
||||
* http://www.uclibc.org/cgi-bin/cvsweb/uClibc/libc/unistd/getopt.c
|
||||
* on 2003-02-18 by Dave Beckett and tidied:
|
||||
* Ran through "indent getopt.c -gnu" then fixed up the mess
|
||||
* Removed register - compilers are smart these days
|
||||
* ANSI-fied the declarations
|
||||
* Prefixed with raptor_ so that it doesn't clash with any getopt
|
||||
* linked in later.
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <raptor_getopt.h>
|
||||
|
||||
int opterr; /* error => print message */
|
||||
int optind; /* next argv[] index */
|
||||
int optopt; /* Set for unknown arguments */
|
||||
char *optarg; /* option parameter if any */
|
||||
|
||||
/*
|
||||
* Err:
|
||||
* program name argv[0]
|
||||
* specific message
|
||||
* defective option letter
|
||||
*/
|
||||
static int
|
||||
Err (char *name, char *mess, int c) /* returns '?' */
|
||||
{
|
||||
optopt = c;
|
||||
if (opterr)
|
||||
{
|
||||
(void) fprintf (stderr, "%s: %s -- %c\n", name, mess, c);
|
||||
}
|
||||
|
||||
return '?'; /* erroneous-option marker */
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
getopt (int argc, char * const argv[], const char *optstring)
|
||||
{
|
||||
static int sp = 1; /* position within argument */
|
||||
int osp; /* saved `sp' for param test */
|
||||
|
||||
#ifndef STRICT
|
||||
int oind; /* saved `optind' for param test */
|
||||
#endif
|
||||
int c; /* option letter */
|
||||
char *cp; /* -> option in `optstring' */
|
||||
|
||||
optarg = NULL;
|
||||
|
||||
/* initialise getopt vars */
|
||||
if (optind == 0)
|
||||
{
|
||||
optind = 1;
|
||||
opterr = 1;
|
||||
optopt = 1;
|
||||
optarg = NULL;
|
||||
}
|
||||
|
||||
if (sp == 1)
|
||||
{ /* fresh argument */
|
||||
if (optind >= argc /* no more arguments */
|
||||
|| argv[optind][0] != '-' /* no more options */
|
||||
|| argv[optind][1] == '\0' /* not option; stdin */
|
||||
)
|
||||
return EOF;
|
||||
else if (strcmp (argv[optind], "--") == 0)
|
||||
{
|
||||
++optind; /* skip over "--" */
|
||||
return EOF; /* "--" marks end of options */
|
||||
}
|
||||
}
|
||||
|
||||
c = argv[optind][sp]; /* option letter */
|
||||
osp = sp++; /* get ready for next letter */
|
||||
|
||||
#ifndef STRICT
|
||||
oind = optind; /* save optind for param test */
|
||||
#endif
|
||||
if (argv[optind][sp] == '\0')
|
||||
{ /* end of argument */
|
||||
++optind; /* get ready for next try */
|
||||
sp = 1; /* beginning of next argument */
|
||||
}
|
||||
|
||||
if (c == ':'
|
||||
|| c == '?' /* optstring syntax conflict */
|
||||
|| (cp = strchr (optstring, c)) == NULL) /* not found */
|
||||
{
|
||||
return Err (argv[0], "illegal option", c);
|
||||
}
|
||||
|
||||
if (cp[1] == ':')
|
||||
{ /* option takes parameter */
|
||||
#ifdef STRICT
|
||||
if (osp != 1)
|
||||
{
|
||||
return Err (argv[0], "option must not be clustered", c);
|
||||
}
|
||||
|
||||
/* reset by end of argument */
|
||||
if (sp != 1)
|
||||
{
|
||||
return Err (argv[0], "option must be followed by white space", c);
|
||||
}
|
||||
#else
|
||||
if (oind == optind)
|
||||
{ /* argument w/o whitespace */
|
||||
optarg = &argv[optind][sp];
|
||||
sp = 1; /* beginning of next argument */
|
||||
}
|
||||
|
||||
else
|
||||
#endif
|
||||
if (optind >= argc)
|
||||
{
|
||||
return Err (argv[0], "option requires an argument", c);
|
||||
}
|
||||
|
||||
else /* argument w/ whitespace */
|
||||
optarg = argv[optind];
|
||||
|
||||
++optind; /* skip over parameter */
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
Reference in New Issue
Block a user