summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdwarf/common/dwgetopt.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libdwarf/common/dwgetopt.h')
-rw-r--r--usr/src/lib/libdwarf/common/dwgetopt.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/usr/src/lib/libdwarf/common/dwgetopt.h b/usr/src/lib/libdwarf/common/dwgetopt.h
new file mode 100644
index 0000000000..74b9927f06
--- /dev/null
+++ b/usr/src/lib/libdwarf/common/dwgetopt.h
@@ -0,0 +1,85 @@
+/* $NetBSD: getopt.c,v 1.1 2009/03/22 22:33:13 joerg Exp $*/
+/* Modified by David Anderson to work with GNU/Linux and freebsd.
+ Added {} for clarity.
+ Switched to standard dwarfdump formatting.
+ Treatment of : modified so that :: gets dwoptarg NULL
+ if space follows the letter
+ (the dwoptarg is set to null).
+*/
+/*
+* 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.
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+extern int dwopterr;
+extern int dwoptind;
+extern int dwoptopt;
+extern int dwoptreset;
+extern char *dwoptarg;
+
+int dwgetopt(int nargc, char * const nargv[], const char *ostr);
+
+/* As of October 2017 it seems adviseable to allow
+ long option names. So based on a reading of
+ 'man 3 getopt' we reimplement a portion of GNU getopt_long().
+ It's a wonderfully sensible design and all the credit
+ should go to the original designers.
+ We are not implementing all the features of GNU/Linux
+ getopt_long(), just the features we wish to use.
+ Specifically, we require val be 0 and flag
+ be NULL and ignore those fields.
+ We do not implement GNU digit_optind at all.
+ Within these restrictions the interface behaves the same
+ as GNU getopt_long() (or so it appears from the
+ getopt documentation:
+ release 4.04 of the Linux man-pages project,
+ GETOPT(3),
+ http://www.kernel.org/doc/man-pages/).
+ */
+
+struct dwoption {
+ const char *name;
+ int has_arg;
+ int *flag;
+ int val;
+};
+#define dwno_argument 0
+#define dwrequired_argument 1
+#define dwoptional_argument 2
+
+int dwgetopt_long(int nargc, char *const nargv[],
+ const char *ostr,
+ const struct dwoption* longopts,
+ int *longindex);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */