diff options
Diffstat (limited to 'usr/src/lib/libdwarf/common/dwgetopt.h')
-rw-r--r-- | usr/src/lib/libdwarf/common/dwgetopt.h | 85 |
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 */ |