Re-add getopt.c for MSWin psql.
authorBruce Momjian <bruce@momjian.us>
Tue, 29 Oct 2002 04:22:37 +0000 (04:22 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 29 Oct 2002 04:22:37 +0000 (04:22 +0000)
src/port/getopt.c [new file with mode: 0644]
src/utils/getopt.c [deleted file]

diff --git a/src/port/getopt.c b/src/port/getopt.c
new file mode 100644 (file)
index 0000000..ca49f22
--- /dev/null
@@ -0,0 +1,127 @@
+/* This is used by psql under MS Win */
+
+/*
+ * 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.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)getopt.c   8.3 (Berkeley) 4/27/95";
+#endif   /* LIBC_SCCS and not lint */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.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;
+{
+       extern char *__progname;
+       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 == '-' && place[1] == '\0')
+               {                                               /* 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) fprintf(stderr,
+                                          "%s: illegal option -- %c\n", __progname, 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) fprintf(stderr,
+                                                          "%s: option requires an argument -- %c\n",
+                                                          __progname, optopt);
+                       return BADCH;
+               }
+               else
+/* white space */
+                       optarg = nargv[optind];
+               place = EMSG;
+               ++optind;
+       }
+       return optopt;                          /* dump back option letter */
+}
diff --git a/src/utils/getopt.c b/src/utils/getopt.c
deleted file mode 100644 (file)
index e69de29..0000000