summaryrefslogtreecommitdiff
path: root/time/getopt.c
diff options
context:
space:
mode:
authorKarel Zak <kzak@redhat.com>2006-12-07 00:25:32 +0100
committerKarel Zak <kzak@redhat.com>2006-12-07 00:25:32 +0100
commit6dbe3af945a63f025561abb83275cee9ff06c57b (patch)
tree19e59eac8ac465b5bc409b5adf815b582c92f633 /time/getopt.c
downloadutil-linux-old-6dbe3af945a63f025561abb83275cee9ff06c57b.tar.gz
Imported from util-linux-2.2 tarball.
Diffstat (limited to 'time/getopt.c')
-rw-r--r--time/getopt.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/time/getopt.c b/time/getopt.c
new file mode 100644
index 00000000..dbe60b18
--- /dev/null
+++ b/time/getopt.c
@@ -0,0 +1,93 @@
+#ifndef lint
+#ifndef NOID
+static char elsieid[] = "@(#)getopt.c 7.5";
+/* Modified from the UCB version with the SCCS ID appearing below. */
+#endif /* !defined NOID */
+#endif /* !defined lint */
+
+/*LINTLIBRARY*/
+
+/*
+ * Copyright (c) 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of California at Berkeley. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific written prior permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
+#ifdef LIBC_SCCS
+#ifndef lint
+static char sccsid[] = "@(#)getopt.c 4.5 (Berkeley) 11/24/87";
+#endif /* !defined lint */
+#endif /* defined LIBC_SCCS */
+
+#include <stdio.h>
+
+/*
+ * get option letter from argument vector
+ */
+extern int opterr; /* if error message should be printed */
+extern int optind; /* index into parent argv vector */
+extern int optopt; /* character checked for validity */
+extern char * optarg; /* argument associated with option */
+
+#define BADCH (int)'?'
+static char EMSG[1];
+#define tell(s) { \
+ if (opterr) { \
+ (void) fputs(*nargv, stderr); \
+ (void) fputs(s, stderr); \
+ (void) fputc(optopt, stderr); \
+ (void) fputc((int)'\n', stderr); \
+ } \
+ return(BADCH); \
+}
+
+extern char * strchr();
+
+int
+getopt(nargc, nargv, ostr)
+ int nargc;
+ char **nargv, *ostr;
+{
+ static char *place = EMSG; /* option letter processing */
+ register char *oli; /* option letter list index */
+
+ if (!*place) { /* update scanning pointer */
+ if (optind >= nargc || *(place = nargv[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;
+ tell(": illegal option -- ");
+ }
+ if (*++oli != ':') { /* don't need argument */
+ optarg = NULL;
+ if (!*place)
+ ++optind;
+ }
+ else { /* need an argument */
+ if (*place) /* no white space */
+ optarg = place;
+ else if (nargc <= ++optind) { /* no arg */
+ place = EMSG;
+ tell(": option requires an argument -- ");
+ }
+ else /* white space */
+ optarg = nargv[optind];
+ place = EMSG;
+ ++optind;
+ }
+ return(optopt); /* dump back option letter */
+}