1*8d67ca89SAndroid Build Coastguard Worker /* $NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $ */ 2*8d67ca89SAndroid Build Coastguard Worker /* $FreeBSD$ */ 3*8d67ca89SAndroid Build Coastguard Worker 4*8d67ca89SAndroid Build Coastguard Worker /*- 5*8d67ca89SAndroid Build Coastguard Worker * Copyright (c) 2000 The NetBSD Foundation, Inc. 6*8d67ca89SAndroid Build Coastguard Worker * All rights reserved. 7*8d67ca89SAndroid Build Coastguard Worker * 8*8d67ca89SAndroid Build Coastguard Worker * This code is derived from software contributed to The NetBSD Foundation 9*8d67ca89SAndroid Build Coastguard Worker * by Dieter Baron and Thomas Klausner. 10*8d67ca89SAndroid Build Coastguard Worker * 11*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 12*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 13*8d67ca89SAndroid Build Coastguard Worker * are met: 14*8d67ca89SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 15*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 16*8d67ca89SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 17*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 18*8d67ca89SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 19*8d67ca89SAndroid Build Coastguard Worker * 20*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21*8d67ca89SAndroid Build Coastguard Worker * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22*8d67ca89SAndroid Build Coastguard Worker * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23*8d67ca89SAndroid Build Coastguard Worker * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24*8d67ca89SAndroid Build Coastguard Worker * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25*8d67ca89SAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26*8d67ca89SAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27*8d67ca89SAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28*8d67ca89SAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29*8d67ca89SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30*8d67ca89SAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE. 31*8d67ca89SAndroid Build Coastguard Worker */ 32*8d67ca89SAndroid Build Coastguard Worker 33*8d67ca89SAndroid Build Coastguard Worker #pragma once 34*8d67ca89SAndroid Build Coastguard Worker 35*8d67ca89SAndroid Build Coastguard Worker /** 36*8d67ca89SAndroid Build Coastguard Worker * @file getopt.h 37*8d67ca89SAndroid Build Coastguard Worker * @brief The getopt() and getopt_long() functions. 38*8d67ca89SAndroid Build Coastguard Worker */ 39*8d67ca89SAndroid Build Coastguard Worker 40*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 41*8d67ca89SAndroid Build Coastguard Worker 42*8d67ca89SAndroid Build Coastguard Worker #include <bits/getopt.h> 43*8d67ca89SAndroid Build Coastguard Worker 44*8d67ca89SAndroid Build Coastguard Worker /** A `has_arg` value for `struct option`. */ 45*8d67ca89SAndroid Build Coastguard Worker #define no_argument 0 46*8d67ca89SAndroid Build Coastguard Worker /** A `has_arg` value for `struct option`. */ 47*8d67ca89SAndroid Build Coastguard Worker #define required_argument 1 48*8d67ca89SAndroid Build Coastguard Worker /** A `has_arg` value for `struct option`. */ 49*8d67ca89SAndroid Build Coastguard Worker #define optional_argument 2 50*8d67ca89SAndroid Build Coastguard Worker 51*8d67ca89SAndroid Build Coastguard Worker struct option { 52*8d67ca89SAndroid Build Coastguard Worker /** 53*8d67ca89SAndroid Build Coastguard Worker * Name of long option. Options must have a non-NULL name. 54*8d67ca89SAndroid Build Coastguard Worker * A NULL name signals the end of the options array. 55*8d67ca89SAndroid Build Coastguard Worker */ 56*8d67ca89SAndroid Build Coastguard Worker const char * _Nullable name; 57*8d67ca89SAndroid Build Coastguard Worker 58*8d67ca89SAndroid Build Coastguard Worker /** 59*8d67ca89SAndroid Build Coastguard Worker * One of `no_argument`, `required_argument`, or `optional_argument`. 60*8d67ca89SAndroid Build Coastguard Worker */ 61*8d67ca89SAndroid Build Coastguard Worker int has_arg; 62*8d67ca89SAndroid Build Coastguard Worker 63*8d67ca89SAndroid Build Coastguard Worker /** If not NULL, set `*flag` to val when option found. */ 64*8d67ca89SAndroid Build Coastguard Worker int* _Nullable flag; 65*8d67ca89SAndroid Build Coastguard Worker 66*8d67ca89SAndroid Build Coastguard Worker /** If `flag` not NULL, the value to assign to `*flag`; otherwise the return value. */ 67*8d67ca89SAndroid Build Coastguard Worker int val; 68*8d67ca89SAndroid Build Coastguard Worker }; 69*8d67ca89SAndroid Build Coastguard Worker 70*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS 71*8d67ca89SAndroid Build Coastguard Worker 72*8d67ca89SAndroid Build Coastguard Worker /** 73*8d67ca89SAndroid Build Coastguard Worker * [getopt_long(3)](https://man7.org/linux/man-pages/man3/getopt.3.html) parses command-line options. 74*8d67ca89SAndroid Build Coastguard Worker */ 75*8d67ca89SAndroid Build Coastguard Worker int getopt_long(int __argc, char* _Nonnull const* _Nonnull __argv, const char* _Nonnull __options, const struct option* _Nonnull __long_options, int* _Nullable __long_index); 76*8d67ca89SAndroid Build Coastguard Worker 77*8d67ca89SAndroid Build Coastguard Worker /** 78*8d67ca89SAndroid Build Coastguard Worker * [getopt_long_only(3)](https://man7.org/linux/man-pages/man3/getopt.3.html) parses command-line options. 79*8d67ca89SAndroid Build Coastguard Worker */ 80*8d67ca89SAndroid Build Coastguard Worker int getopt_long_only(int __argc, char* _Nonnull const* _Nonnull __argv, const char* _Nonnull __options, const struct option* _Nonnull __long_options, int* _Nullable __long_index); 81*8d67ca89SAndroid Build Coastguard Worker 82*8d67ca89SAndroid Build Coastguard Worker #ifndef _OPTRESET_DECLARED 83*8d67ca89SAndroid Build Coastguard Worker #define _OPTRESET_DECLARED 84*8d67ca89SAndroid Build Coastguard Worker /** 85*8d67ca89SAndroid Build Coastguard Worker * Must be set to 1 to reset the `getopt` functions before scanning a new argument vector. 86*8d67ca89SAndroid Build Coastguard Worker */ 87*8d67ca89SAndroid Build Coastguard Worker extern int optreset; 88*8d67ca89SAndroid Build Coastguard Worker #endif 89*8d67ca89SAndroid Build Coastguard Worker 90*8d67ca89SAndroid Build Coastguard Worker __END_DECLS 91