1*61046927SAndroid Build Coastguard Worker /* $OpenBSD: getopt.h,v 1.2 2008/06/26 05:42:04 ray Exp $ */ 2*61046927SAndroid Build Coastguard Worker /* $NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $ */ 3*61046927SAndroid Build Coastguard Worker 4*61046927SAndroid Build Coastguard Worker /*- 5*61046927SAndroid Build Coastguard Worker * Copyright (c) 2000 The NetBSD Foundation, Inc. 6*61046927SAndroid Build Coastguard Worker * All rights reserved. 7*61046927SAndroid Build Coastguard Worker * 8*61046927SAndroid Build Coastguard Worker * This code is derived from software contributed to The NetBSD Foundation 9*61046927SAndroid Build Coastguard Worker * by Dieter Baron and Thomas Klausner. 10*61046927SAndroid Build Coastguard Worker * 11*61046927SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 12*61046927SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 13*61046927SAndroid Build Coastguard Worker * are met: 14*61046927SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 15*61046927SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 16*61046927SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 17*61046927SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 18*61046927SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 19*61046927SAndroid Build Coastguard Worker * 20*61046927SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21*61046927SAndroid Build Coastguard Worker * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22*61046927SAndroid Build Coastguard Worker * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23*61046927SAndroid Build Coastguard Worker * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24*61046927SAndroid Build Coastguard Worker * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25*61046927SAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26*61046927SAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27*61046927SAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28*61046927SAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29*61046927SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30*61046927SAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE. 31*61046927SAndroid Build Coastguard Worker */ 32*61046927SAndroid Build Coastguard Worker 33*61046927SAndroid Build Coastguard Worker #ifndef _GETOPT_H_ 34*61046927SAndroid Build Coastguard Worker #define _GETOPT_H_ 35*61046927SAndroid Build Coastguard Worker 36*61046927SAndroid Build Coastguard Worker /* 37*61046927SAndroid Build Coastguard Worker * GNU-like getopt_long() and 4.4BSD getsubopt()/optreset extensions 38*61046927SAndroid Build Coastguard Worker */ 39*61046927SAndroid Build Coastguard Worker #define no_argument 0 40*61046927SAndroid Build Coastguard Worker #define required_argument 1 41*61046927SAndroid Build Coastguard Worker #define optional_argument 2 42*61046927SAndroid Build Coastguard Worker 43*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 44*61046927SAndroid Build Coastguard Worker extern "C" { 45*61046927SAndroid Build Coastguard Worker #endif 46*61046927SAndroid Build Coastguard Worker 47*61046927SAndroid Build Coastguard Worker struct option { 48*61046927SAndroid Build Coastguard Worker /* name of long option */ 49*61046927SAndroid Build Coastguard Worker const char *name; 50*61046927SAndroid Build Coastguard Worker /* 51*61046927SAndroid Build Coastguard Worker * one of no_argument, required_argument, and optional_argument: 52*61046927SAndroid Build Coastguard Worker * whether option takes an argument 53*61046927SAndroid Build Coastguard Worker */ 54*61046927SAndroid Build Coastguard Worker int has_arg; 55*61046927SAndroid Build Coastguard Worker /* if not NULL, set *flag to val when option found */ 56*61046927SAndroid Build Coastguard Worker int *flag; 57*61046927SAndroid Build Coastguard Worker /* if flag not NULL, value to set *flag to; else return value */ 58*61046927SAndroid Build Coastguard Worker int val; 59*61046927SAndroid Build Coastguard Worker }; 60*61046927SAndroid Build Coastguard Worker 61*61046927SAndroid Build Coastguard Worker int getopt_long(int, char * const *, const char *, 62*61046927SAndroid Build Coastguard Worker const struct option *, int *); 63*61046927SAndroid Build Coastguard Worker int getopt_long_only(int, char * const *, const char *, 64*61046927SAndroid Build Coastguard Worker const struct option *, int *); 65*61046927SAndroid Build Coastguard Worker #ifndef _GETOPT_DEFINED_ 66*61046927SAndroid Build Coastguard Worker #define _GETOPT_DEFINED_ 67*61046927SAndroid Build Coastguard Worker int getopt(int, char * const *, const char *); 68*61046927SAndroid Build Coastguard Worker int getsubopt(char **, char * const *, char **); 69*61046927SAndroid Build Coastguard Worker 70*61046927SAndroid Build Coastguard Worker extern char *optarg; /* getopt(3) external variables */ 71*61046927SAndroid Build Coastguard Worker extern int opterr; 72*61046927SAndroid Build Coastguard Worker extern int optind; 73*61046927SAndroid Build Coastguard Worker extern int optopt; 74*61046927SAndroid Build Coastguard Worker extern int optreset; 75*61046927SAndroid Build Coastguard Worker extern char *suboptarg; /* getsubopt(3) external variable */ 76*61046927SAndroid Build Coastguard Worker #endif 77*61046927SAndroid Build Coastguard Worker 78*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 79*61046927SAndroid Build Coastguard Worker } 80*61046927SAndroid Build Coastguard Worker #endif 81*61046927SAndroid Build Coastguard Worker 82*61046927SAndroid Build Coastguard Worker #endif /* !_GETOPT_H_ */ 83