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