]> andersk Git - openssh.git/commitdiff
- (djm) Pull in getopt(3) from OpenBSD libc for the optreset extension.
authordjm <djm>
Sat, 14 Jul 2001 03:22:53 +0000 (03:22 +0000)
committerdjm <djm>
Sat, 14 Jul 2001 03:22:53 +0000 (03:22 +0000)
ChangeLog
acconfig.h
configure.in
openbsd-compat/Makefile.in
openbsd-compat/getopt.c [new file with mode: 0644]
openbsd-compat/getopt.h [new file with mode: 0644]
openbsd-compat/openbsd-compat.h
ssh.c

index f45294023cd171c5d2e0a98d38c31d542f7f1a6b..8151b91fef4c5ec7114c612e3636c99b5e966950 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -49,6 +49,7 @@
      note that dirname(3) modifies its argument on some systems.
  - (djm) Reorder Makefile.in so clean targets work a little better when
    run directly from Makefile.in
+ - (djm) Pull in getopt(3) from OpenBSD libc for the optreset extension.
 
 20010711
  - (djm) dirname(3) may modify its argument on glibc and other systems. 
index d46ca1aba35c6def42b68251a3caa0ee82046d6e..af6e586e99dcdf5572e0429160033122cc4c3fb3 100644 (file)
 /* Define in your struct dirent expects you to allocate extra space for d_name */
 #undef BROKEN_ONE_BYTE_DIRENT_D_NAME
 
+/* Define if your getopt(3) defines and uses optreset */
+#undef HAVE_GETOPT_OPTRESET
+
 @BOTTOM@
 
 /* ******************* Shouldn't need to edit below this line ************** */
index 614916edcf8e128ad7533c2b4e5f085b97e2b231..9a0e7a2c4310b6a72cd7faf0ce2f84a65a3f80ce 100644 (file)
@@ -459,7 +459,7 @@ AC_ARG_WITH(tcp-wrappers,
 )
 
 dnl    Checks for library functions.
-AC_CHECK_FUNCS(arc4random atexit b64_ntop bcopy bindresvport_sa clock dirname fchown fchmod freeaddrinfo futimes gai_strerror getcwd getaddrinfo getgrouplist getnameinfo getrlimit getrusage getttyent glob inet_ntoa innetgr login_getcapbool md5_crypt memmove mkdtemp on_exit openpty readpassphrase realpath rresvport_af setdtablesize setenv setegid seteuid setlogin setproctitle setresgid setreuid setrlimit setsid setvbuf sigaction sigvec snprintf strerror strlcat strlcpy strmode strsep sysconf tcgetpgrp utimes vsnprintf vhangup vis waitpid _getpty __b64_ntop)
+AC_CHECK_FUNCS(arc4random atexit b64_ntop bcopy bindresvport_sa clock dirname fchown fchmod freeaddrinfo futimes gai_strerror getcwd getaddrinfo getgrouplist getopt getnameinfo getrlimit getrusage getttyent glob inet_ntoa innetgr login_getcapbool md5_crypt memmove mkdtemp on_exit openpty readpassphrase realpath rresvport_af setdtablesize setenv setegid seteuid setlogin setproctitle setresgid setreuid setrlimit setsid setvbuf sigaction sigvec snprintf strerror strlcat strlcpy strmode strsep sysconf tcgetpgrp utimes vsnprintf vhangup vis waitpid _getpty __b64_ntop)
 dnl    Checks for time functions
 AC_CHECK_FUNCS(gettimeofday time)
 dnl    Checks for libutil functions
@@ -1184,6 +1184,20 @@ if test "x$ac_cv_libc_defines___progname" = "xyes" ; then
        AC_DEFINE(HAVE___PROGNAME)
 fi
 
+AC_CACHE_CHECK([whether getopt has optreset support],
+               ac_cv_have_getopt_optreset, [
+       AC_TRY_LINK(
+               [
+#include <getopt.h>
+               ],
+               [ extern int optreset; optreset = 0; ],
+               [ ac_cv_have_getopt_optreset="yes" ],
+               [ ac_cv_have_getopt_optreset="no" ]
+       )
+])
+if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then
+       AC_DEFINE(HAVE_GETOPT_OPTRESET)
+fi
 
 AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [
        AC_TRY_LINK([], 
index 3a82b28a4d7e0038ec60a627b2cc70861c10e80a..964b42f995d31b6c0681e60cd86e33bbfde17ebf 100644 (file)
@@ -16,7 +16,7 @@ RANLIB=@RANLIB@
 INSTALL=@INSTALL@
 LDFLAGS=-L. @LDFLAGS@
 
-OPENBSD=base64.o bindresvport.o daemon.o dirname.o getcwd.o getgrouplist.o glob.o inet_ntoa.o mktemp.o readpassphrase.o realpath.o rresvport.o setenv.o setproctitle.o sigact.o strlcat.o strlcpy.o strmode.o strsep.o vis.o
+OPENBSD=base64.o bindresvport.o daemon.o dirname.o getcwd.o getgrouplist.o getopt.o glob.o inet_ntoa.o mktemp.o readpassphrase.o realpath.o rresvport.o setenv.o setproctitle.o sigact.o strlcat.o strlcpy.o strmode.o strsep.o vis.o
 
 COMPAT=bsd-arc4random.o bsd-cygwin_util.o bsd-misc.o bsd-nextstep.o bsd-snprintf.o bsd-waitpid.o fake-getaddrinfo.o fake-getnameinfo.o
 
diff --git a/openbsd-compat/getopt.c b/openbsd-compat/getopt.c
new file mode 100644 (file)
index 0000000..071e278
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * 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 "config.h"
+#if !defined(HAVE_GETOPT) || !defined(HAVE_GETOPT_OPTRESET)
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char *rcsid = "$OpenBSD: getopt.c,v 1.2 1996/08/19 08:33:32 tholo Exp $";
+#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 == '-') {      /* 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 */
+}
+
+#endif /* !defined(HAVE_GETOPT) || !defined(HAVE_OPTRESET) */
diff --git a/openbsd-compat/getopt.h b/openbsd-compat/getopt.h
new file mode 100644 (file)
index 0000000..8583356
--- /dev/null
@@ -0,0 +1,14 @@
+/* $Id$ */
+
+#ifndef _GETOPT_H
+#define _GETOPT_H
+
+#include "config.h"
+
+#ifndef HAVE_GETOPT_H
+
+int getopt(int argc, char **argv, char *opts);
+
+#endif
+
+#endif /* _GETOPT_H */
index 0d3f82651a7232d01909349de7353d84377ed39f..759aaa45ccb3348d5706195ee32213d2b57ee22b 100644 (file)
@@ -25,6 +25,7 @@
 #include "getgrouplist.h"
 #include "glob.h"
 #include "readpassphrase.h"
+#include "getopt.h"
 
 /* Home grown routines */
 #include "bsd-arc4random.h"
diff --git a/ssh.c b/ssh.c
index 98854d20c708ea0cfa6dc7b9e43aa158678743fe..374630f71fe3df2fe80a5a002ba0cfa06987b440 100644 (file)
--- a/ssh.c
+++ b/ssh.c
@@ -259,6 +259,10 @@ main(int ac, char **av)
        struct passwd *pw;
        int dummy;
        uid_t original_effective_uid;
+       extern int optopt;
+       extern int optind;
+       extern int optreset;
+       extern char *optarg;
 
        __progname = get_progname(av[0]);
        init_rng();
This page took 0.069957 seconds and 5 git commands to generate.