1*57696d54SAkhilesh Sanikop /* 2*57696d54SAkhilesh Sanikop * Copyright (C) 2015 The Android Open Source Project 3*57696d54SAkhilesh Sanikop * 4*57696d54SAkhilesh Sanikop * This software is licensed under the terms of the GNU General Public 5*57696d54SAkhilesh Sanikop * License version 2, as published by the Free Software Foundation, and 6*57696d54SAkhilesh Sanikop * may be copied, distributed, and modified under those terms. 7*57696d54SAkhilesh Sanikop * 8*57696d54SAkhilesh Sanikop * This program is distributed in the hope that it will be useful, 9*57696d54SAkhilesh Sanikop * but WITHOUT ANY WARRANTY; without even the implied warranty of 10*57696d54SAkhilesh Sanikop * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11*57696d54SAkhilesh Sanikop * GNU General Public License for more details. 12*57696d54SAkhilesh Sanikop */ 13*57696d54SAkhilesh Sanikop 14*57696d54SAkhilesh Sanikop #ifndef ANDROID_POPT_H 15*57696d54SAkhilesh Sanikop #define ANDROID_POPT_H 16*57696d54SAkhilesh Sanikop 17*57696d54SAkhilesh Sanikop /* 18*57696d54SAkhilesh Sanikop * popt has been deprecated for some time, and is replaced by GNOME's glib 19*57696d54SAkhilesh Sanikop * option parser. Instead of pulling in either of those dependencies, this 20*57696d54SAkhilesh Sanikop * stub implements just enough of popt to get things working. 21*57696d54SAkhilesh Sanikop */ 22*57696d54SAkhilesh Sanikop 23*57696d54SAkhilesh Sanikop #include <stdio.h> 24*57696d54SAkhilesh Sanikop #include <stdlib.h> 25*57696d54SAkhilesh Sanikop #include <string.h> 26*57696d54SAkhilesh Sanikop #include <getopt.h> 27*57696d54SAkhilesh Sanikop 28*57696d54SAkhilesh Sanikop #define POPT_ARG_NONE 0U 29*57696d54SAkhilesh Sanikop #define POPT_ARG_STRING 1U 30*57696d54SAkhilesh Sanikop #define POPT_ARG_INT 2U 31*57696d54SAkhilesh Sanikop 32*57696d54SAkhilesh Sanikop #define POPT_AUTOHELP 33*57696d54SAkhilesh Sanikop 34*57696d54SAkhilesh Sanikop #pragma pack(push) 35*57696d54SAkhilesh Sanikop #pragma pack(0) 36*57696d54SAkhilesh Sanikop 37*57696d54SAkhilesh Sanikop struct poptOption { 38*57696d54SAkhilesh Sanikop const char *longName; 39*57696d54SAkhilesh Sanikop char shortName; 40*57696d54SAkhilesh Sanikop unsigned int argInfo; 41*57696d54SAkhilesh Sanikop void *arg; 42*57696d54SAkhilesh Sanikop int val; 43*57696d54SAkhilesh Sanikop const char *descrip; 44*57696d54SAkhilesh Sanikop const char *argDescrip; 45*57696d54SAkhilesh Sanikop }; 46*57696d54SAkhilesh Sanikop 47*57696d54SAkhilesh Sanikop struct _poptContext { 48*57696d54SAkhilesh Sanikop int argc; 49*57696d54SAkhilesh Sanikop const char **argv; 50*57696d54SAkhilesh Sanikop const struct poptOption *options; 51*57696d54SAkhilesh Sanikop struct option *long_options; 52*57696d54SAkhilesh Sanikop const char *otherHelp; 53*57696d54SAkhilesh Sanikop }; 54*57696d54SAkhilesh Sanikop 55*57696d54SAkhilesh Sanikop typedef struct _poptContext *poptContext; 56*57696d54SAkhilesh Sanikop 57*57696d54SAkhilesh Sanikop #pragma pack(pop) 58*57696d54SAkhilesh Sanikop 59*57696d54SAkhilesh Sanikop poptContext poptGetContext(const char *name, int argc, const char **argv, 60*57696d54SAkhilesh Sanikop const struct poptOption *options, unsigned int flags); 61*57696d54SAkhilesh Sanikop poptContext poptFreeContext(poptContext con); 62*57696d54SAkhilesh Sanikop void poptResetContext(poptContext con); 63*57696d54SAkhilesh Sanikop 64*57696d54SAkhilesh Sanikop void poptSetOtherOptionHelp(poptContext con, const char *text); 65*57696d54SAkhilesh Sanikop void poptPrintUsage(poptContext con, FILE *fp, int flags); 66*57696d54SAkhilesh Sanikop 67*57696d54SAkhilesh Sanikop int poptGetNextOpt(poptContext con); 68*57696d54SAkhilesh Sanikop const char *poptGetArg(poptContext con); 69*57696d54SAkhilesh Sanikop 70*57696d54SAkhilesh Sanikop #endif 71