Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/sgimips/stand Add getopt.c



details:   https://anonhg.NetBSD.org/src/rev/4f53c01603f4
branches:  trunk
changeset: 555186:4f53c01603f4
user:      sekiya <sekiya%NetBSD.org@localhost>
date:      Tue Nov 11 06:28:15 2003 +0000

description:
Add getopt.c

diffstat:

 sys/arch/sgimips/stand/boot/Makefile   |    5 +-
 sys/arch/sgimips/stand/common/getopt.c |  109 +++++++++++++++++++++++++++++++++
 2 files changed, 112 insertions(+), 2 deletions(-)

diffs (132 lines):

diff -r d7d31d4fd51d -r 4f53c01603f4 sys/arch/sgimips/stand/boot/Makefile
--- a/sys/arch/sgimips/stand/boot/Makefile      Tue Nov 11 00:44:16 2003 +0000
+++ b/sys/arch/sgimips/stand/boot/Makefile      Tue Nov 11 06:28:15 2003 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.5 2002/12/23 19:31:25 pooka Exp $
+#      $NetBSD: Makefile,v 1.6 2003/11/11 06:30:39 sekiya Exp $
 
 PROG=  boot
 
@@ -7,7 +7,8 @@
 #
 STRIPFLAG=
 
-SRCS=  start.S boot.c bootinfo.c conf.c devopen.c putchar.c getchar.c disk.c
+SRCS=  start.S boot.c bootinfo.c conf.c devopen.c putchar.c getchar.c \
+       getopt.c disk.c
 
 ${PROG}: ${PROG}.elf ${PROG}.ip32
        ${ELF2ECOFF} ${PROG}.elf ${PROG}
diff -r d7d31d4fd51d -r 4f53c01603f4 sys/arch/sgimips/stand/common/getopt.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/sgimips/stand/common/getopt.c    Tue Nov 11 06:28:15 2003 +0000
@@ -0,0 +1,109 @@
+/*     $NetBSD: getopt.c,v 1.1 2003/11/11 06:28:15 sekiya Exp $        */
+
+/*
+ * 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. 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.
+ */
+
+/* from: netbsd:lib/libc/stdlib/getopt.c */
+
+#include <lib/libsa/stand.h>
+#include <lib/libkern/libkern.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(nargc, nargv, ostr)
+       int nargc;
+       char * const *nargv;
+       const 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 != ':')
+                       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)
+                               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 */
+}



Home | Main Index | Thread Index | Old Index