]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/getopt.h
zebra, lib: fix the ZEBRA_INTERFACE_VRF_UPDATE zapi message
[mirror_frr.git] / lib / getopt.h
index 68a9acfbefe51595dfc65717692c324a6878a6d1..138870d199e98664f7e37c2031348f2e458168db 100644 (file)
@@ -1,28 +1,40 @@
 /* Declarations for getopt.
  Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
-
  NOTE: The canonical source of this file is maintained with the GNU C Library.
  Bugs can be reported to bug-glibc@gnu.org.
-
  This program is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by the
  Free Software Foundation; either version 2, or (at your option) any
  later version.
-
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  USA.  */
* Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
+ *
* NOTE: The canonical source of this file is maintained with the GNU C Library.
* Bugs can be reported to bug-glibc@gnu.org.
+ *
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
* with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
 
 #ifndef _GETOPT_H
 #define _GETOPT_H 1
 
-#ifdef __cplusplus
+/*
+ * The operating system may or may not provide getopt_long(), and if
+ * so it may or may not be a version we are willing to use.  Our
+ * strategy is to declare getopt here, and then provide code unless
+ * the supplied version is adequate.  The difficult case is when a
+ * declaration for getopt is provided, as our declaration must match.
+ *
+ * XXX Arguably this version should be named differently, and the
+ * local names defined to refer to the system version when we choose
+ * to use the system version.
+ */
+
+#ifdef __cplusplus
 extern "C" {
 #endif
 
@@ -78,18 +90,17 @@ extern int optopt;
    one).  For long options that have a zero `flag' field, `getopt'
    returns the contents of the `val' field.  */
 
-struct option
-{
-#if defined (__STDC__) && __STDC__
-  const char *name;
+struct option {
+#if defined(__STDC__) && __STDC__
+       const char *name;
 #else
-  char *name;
+       char *name;
 #endif
-  /* has_arg can't be an enum because some compilers complain about
-     type mismatches in all the code that assumes it is an int.  */
-  int has_arg;
-  int *flag;
-  int val;
+       /* has_arg can't be an enum because some compilers complain about
+          type mismatches in all the code that assumes it is an int.  */
+       int has_arg;
+       int *flag;
+       int val;
 };
 
 /* Names for the values of the `has_arg' field of `struct option'.  */
@@ -98,35 +109,47 @@ struct option
 #define required_argument      1
 #define optional_argument      2
 
-#if defined (__STDC__) && __STDC__
-#if defined (__GNU_LIBRARY__) || defined (__EXTENSIONS__)
-/* Many other libraries have conflicting prototypes for getopt, with
-   differences in the consts, in stdlib.h.  To avoid compilation
-   errors, only prototype getopt for the GNU C library.  */
-extern int getopt (int argc, char *const *argv, const char *shortopts);
-#else /* not __GNU_LIBRARY__ or __EXTENSIONS__ */
-extern int getopt (void);
-#endif /* __GNU_LIBRARY__ */
-extern int getopt_long (int argc, char *const *argv, const char *shortopts,
-                       const struct option *longopts, int *longind);
-extern int getopt_long_only (int argc, char *const *argv,
-                            const char *shortopts,
-                            const struct option *longopts, int *longind);
+#if defined(__STDC__) && __STDC__
+
+#if REALLY_NEED_PLAIN_GETOPT
+
+/*
+ * getopt is defined in POSIX.2.  Assume that if the system defines
+ * getopt that it complies with POSIX.2.  If not, an autoconf test
+ * should be written to define NONPOSIX_GETOPT_DEFINITION.
+ */
+#ifndef NONPOSIX_GETOPT_DEFINITION
+extern int getopt(int argc, char *const *argv, const char *shortopts);
+#else  /* NONPOSIX_GETOPT_DEFINITION */
+extern int getopt(void);
+#endif /* NONPOSIX_GETOPT_DEFINITION */
+
+#endif
+
+
+extern int getopt_long(int argc, char *const *argv, const char *shortopts,
+                      const struct option *longopts, int *longind);
+extern int getopt_long_only(int argc, char *const *argv, const char *shortopts,
+                           const struct option *longopts, int *longind);
 
 /* Internal only.  Users should not call this directly.  */
-extern int _getopt_internal (int argc, char *const *argv,
-                            const char *shortopts,
-                            const struct option *longopts, int *longind,
-                            int long_only);
+extern int _getopt_internal(int argc, char *const *argv, const char *shortopts,
+                           const struct option *longopts, int *longind,
+                           int long_only);
 #else /* not __STDC__ */
-extern int getopt ();
-extern int getopt_long ();
-extern int getopt_long_only ();
 
-extern int _getopt_internal ();
+#ifdef REALLY_NEED_PLAIN_GETOPT
+extern int getopt();
+#endif /* REALLY_NEED_PLAIN_GETOPT */
+
+extern int getopt_long();
+extern int getopt_long_only();
+
+extern int _getopt_internal();
+
 #endif /* __STDC__ */
 
-#ifdef __cplusplus
+#ifdef __cplusplus
 }
 #endif