1*387f9dfdSAndroid Build Coastguard Worker /* 2*387f9dfdSAndroid Build Coastguard Worker * Copyright 2022 The Android Open Source Project 3*387f9dfdSAndroid Build Coastguard Worker * 4*387f9dfdSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*387f9dfdSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*387f9dfdSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*387f9dfdSAndroid Build Coastguard Worker * 8*387f9dfdSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*387f9dfdSAndroid Build Coastguard Worker * 10*387f9dfdSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*387f9dfdSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*387f9dfdSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*387f9dfdSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*387f9dfdSAndroid Build Coastguard Worker * limitations under the License. 15*387f9dfdSAndroid Build Coastguard Worker */ 16*387f9dfdSAndroid Build Coastguard Worker 17*387f9dfdSAndroid Build Coastguard Worker #pragma once 18*387f9dfdSAndroid Build Coastguard Worker 19*387f9dfdSAndroid Build Coastguard Worker #include <errno.h> 20*387f9dfdSAndroid Build Coastguard Worker #include <stdio.h> 21*387f9dfdSAndroid Build Coastguard Worker 22*387f9dfdSAndroid Build Coastguard Worker #ifdef __cplusplus 23*387f9dfdSAndroid Build Coastguard Worker extern "C" { 24*387f9dfdSAndroid Build Coastguard Worker #endif 25*387f9dfdSAndroid Build Coastguard Worker 26*387f9dfdSAndroid Build Coastguard Worker #define ARGP_ERR_UNKNOWN -1 27*387f9dfdSAndroid Build Coastguard Worker 28*387f9dfdSAndroid Build Coastguard Worker #define ARGP_HELP_STD_HELP 0 29*387f9dfdSAndroid Build Coastguard Worker 30*387f9dfdSAndroid Build Coastguard Worker #define ARGP_KEY_ARG '\0' 31*387f9dfdSAndroid Build Coastguard Worker #define ARGP_KEY_END 256 32*387f9dfdSAndroid Build Coastguard Worker 33*387f9dfdSAndroid Build Coastguard Worker #define OPTION_HIDDEN 1 34*387f9dfdSAndroid Build Coastguard Worker 35*387f9dfdSAndroid Build Coastguard Worker struct argp_option { 36*387f9dfdSAndroid Build Coastguard Worker const char *name; 37*387f9dfdSAndroid Build Coastguard Worker const int key; 38*387f9dfdSAndroid Build Coastguard Worker const char *argname; 39*387f9dfdSAndroid Build Coastguard Worker int n; 40*387f9dfdSAndroid Build Coastguard Worker const char *docstring; 41*387f9dfdSAndroid Build Coastguard Worker }; 42*387f9dfdSAndroid Build Coastguard Worker 43*387f9dfdSAndroid Build Coastguard Worker struct argp_state { 44*387f9dfdSAndroid Build Coastguard Worker int arg_num; 45*387f9dfdSAndroid Build Coastguard Worker void *input; 46*387f9dfdSAndroid Build Coastguard Worker const struct argp *argp; 47*387f9dfdSAndroid Build Coastguard Worker }; 48*387f9dfdSAndroid Build Coastguard Worker 49*387f9dfdSAndroid Build Coastguard Worker typedef int error_t; 50*387f9dfdSAndroid Build Coastguard Worker 51*387f9dfdSAndroid Build Coastguard Worker struct argp { 52*387f9dfdSAndroid Build Coastguard Worker const struct argp_option *options; 53*387f9dfdSAndroid Build Coastguard Worker error_t (*parser)(int key, char *arg, struct argp_state *state); 54*387f9dfdSAndroid Build Coastguard Worker const char *doc; 55*387f9dfdSAndroid Build Coastguard Worker const char *args_doc; 56*387f9dfdSAndroid Build Coastguard Worker }; 57*387f9dfdSAndroid Build Coastguard Worker 58*387f9dfdSAndroid Build Coastguard Worker error_t argp_parse(const struct argp *argp, int argc, char **argv, int, void*, void*); 59*387f9dfdSAndroid Build Coastguard Worker void argp_usage(struct argp_state*); 60*387f9dfdSAndroid Build Coastguard Worker void argp_state_help(struct argp_state*, FILE *fd, int); 61*387f9dfdSAndroid Build Coastguard Worker 62*387f9dfdSAndroid Build Coastguard Worker #ifdef __cplusplus 63*387f9dfdSAndroid Build Coastguard Worker } 64*387f9dfdSAndroid Build Coastguard Worker #endif 65