]> Zhao Yanbai Git Server - minix.git/commitdiff
Fixed a few compile warnings
authorBen Gras <ben@minix3.org>
Mon, 27 Jun 2005 09:30:33 +0000 (09:30 +0000)
committerBen Gras <ben@minix3.org>
Mon, 27 Jun 2005 09:30:33 +0000 (09:30 +0000)
Imported a BSD-licensed getopt() from FreeBSD

lib/other/_svrctl.c
lib/posix/Makefile
lib/posix/_select.c
lib/posix/getopt.c [new file with mode: 0644]

index 3a52d1674f64b95015b3610c25a7752b61d17009..2eb2fe8f32d8bcb876f5d787fb144b13411436c4 100755 (executable)
@@ -2,6 +2,7 @@
  *                                                             24 Apr 1994
  */
 #include <lib.h>
+#include <stdio.h>
 #define svrctl _svrctl
 #include <sys/svrctl.h>
 
index 64d2c27c9ec63f13ab97a2da1dafaef4490b2c82..4c6e3928539d498e5de1dda34ba93c43d8f615d6 100755 (executable)
@@ -96,6 +96,7 @@ OBJECTS       = \
        $(LIBRARY)(_waitpid.o) \
        $(LIBRARY)(_write.o) \
        $(LIBRARY)(gettimeofday.o) \
+       $(LIBRARY)(getopt.o) \
        $(LIBRARY)(lstat.o) \
        $(LIBRARY)(readlink.o) \
        $(LIBRARY)(symlink.o) \
@@ -371,6 +372,9 @@ $(LIBRARY)(_write.o):       _write.c
 $(LIBRARY)(gettimeofday.o):    gettimeofday.c
        $(CC1) gettimeofday.c
 
+$(LIBRARY)(getopt.o):  getopt.c
+       $(CC1) getopt.c
+
 $(LIBRARY)(readlink.o):        readlink.c
        $(CC1) readlink.c
 
index d84808b40c95557a0939d0da8e897663f7e23cf1..4b86d1c979bad8001d7dede1d41b11a253e78bb9 100755 (executable)
@@ -1,5 +1,6 @@
 
 #include <lib.h>
+#include <sys/time.h>
 #include <sys/select.h>
 
 PUBLIC int select(int nfds,
diff --git a/lib/posix/getopt.c b/lib/posix/getopt.c
new file mode 100644 (file)
index 0000000..b3dee7f
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 1987, 1993, 1994
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <string.h>
+#include <stdio.h>
+
+int    opterr = 1,             /* if error message should be printed */
+       optind = 1,             /* index into parent argv vector */
+       optopt,                 /* character checked for validity */
+       optreset;               /* reset getopt */
+char   *optarg;                /* argument associated with option */
+
+#define        BADCH   (int)'?'
+#define        BADARG  (int)':'
+#define        EMSG    ""
+
+/*
+ * getopt --
+ *     Parse argc/argv argument vector.
+ */
+int
+getopt(int nargc, char **nargv, char *ostr)
+{
+       static char *place = EMSG;              /* option letter processing */
+       char *oli;                              /* option letter list index */
+
+       if (optreset || !*place) {              /* update scanning pointer */
+               optreset = 0;
+               if (optind >= nargc || *(place = nargv[optind]) != '-') {
+                       place = EMSG;
+                       return (-1);
+               }
+               if (place[1] && *++place == '-') {      /* found "--" */
+                       ++optind;
+                       place = EMSG;
+                       return (-1);
+               }
+       }                                       /* option letter okay? */
+       if ((optopt = (int)*place++) == (int)':' ||
+           !(oli = strchr(ostr, optopt))) {
+               /*
+                * if the user didn't specify '-' as an option,
+                * assume it means -1.
+                */
+               if (optopt == (int)'-')
+                       return (-1);
+               if (!*place)
+                       ++optind;
+               if (opterr && *ostr != ':')
+                       (void)printf("illegal option -- %c\n", optopt);
+               return (BADCH);
+       }
+       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;
+                       if (*ostr == ':')
+                               return (BADARG);
+                       if (opterr)
+                               (void)printf("option requires an argument -- %c\n", optopt);
+                       return (BADCH);
+               }
+               else                            /* white space */
+                       optarg = nargv[optind];
+               place = EMSG;
+               ++optind;
+       }
+       return (optopt);                        /* dump back option letter */
+}