1 | /** \ingroup popt
|
---|
2 | * \file popt/poptint.h
|
---|
3 | */
|
---|
4 |
|
---|
5 | /* (C) 1998-2000 Red Hat, Inc. -- Licensing details are in the COPYING
|
---|
6 | file accompanying popt source distributions, available from
|
---|
7 | ftp://ftp.rpm.org/pub/rpm/dist. */
|
---|
8 |
|
---|
9 | #ifndef H_POPTINT
|
---|
10 | #define H_POPTINT
|
---|
11 |
|
---|
12 | /**
|
---|
13 | * Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
|
---|
14 | * @param p memory to free
|
---|
15 | * @retval NULL always
|
---|
16 | */
|
---|
17 | /*@unused@*/ static inline /*@null@*/ void *
|
---|
18 | _free(/*@only@*/ /*@null@*/ const void * p)
|
---|
19 | /*@modifies p @*/
|
---|
20 | {
|
---|
21 | if (p != NULL) free((void *)p);
|
---|
22 | return NULL;
|
---|
23 | }
|
---|
24 |
|
---|
25 | /* Bit mask macros. */
|
---|
26 | /*@-exporttype -redef @*/
|
---|
27 | typedef unsigned int __pbm_bits;
|
---|
28 | /*@=exporttype =redef @*/
|
---|
29 | #define __PBM_NBITS (8 * sizeof (__pbm_bits))
|
---|
30 | #define __PBM_IX(d) ((d) / __PBM_NBITS)
|
---|
31 | #define __PBM_MASK(d) ((__pbm_bits) 1 << (((unsigned)(d)) % __PBM_NBITS))
|
---|
32 | /*@-exporttype -redef @*/
|
---|
33 | typedef struct {
|
---|
34 | __pbm_bits bits[1];
|
---|
35 | } pbm_set;
|
---|
36 | /*@=exporttype =redef @*/
|
---|
37 | #define __PBM_BITS(set) ((set)->bits)
|
---|
38 |
|
---|
39 | #define PBM_ALLOC(d) calloc(__PBM_IX (d) + 1, sizeof(__pbm_bits))
|
---|
40 | #define PBM_FREE(s) _free(s);
|
---|
41 | #define PBM_SET(d, s) (__PBM_BITS (s)[__PBM_IX (d)] |= __PBM_MASK (d))
|
---|
42 | #define PBM_CLR(d, s) (__PBM_BITS (s)[__PBM_IX (d)] &= ~__PBM_MASK (d))
|
---|
43 | #define PBM_ISSET(d, s) ((__PBM_BITS (s)[__PBM_IX (d)] & __PBM_MASK (d)) != 0)
|
---|
44 |
|
---|
45 | struct optionStackEntry {
|
---|
46 | int argc;
|
---|
47 | /*@only@*/ /*@null@*/
|
---|
48 | const char ** argv;
|
---|
49 | /*@only@*/ /*@null@*/
|
---|
50 | pbm_set * argb;
|
---|
51 | int next;
|
---|
52 | /*@only@*/ /*@null@*/
|
---|
53 | const char * nextArg;
|
---|
54 | /*@observer@*/ /*@null@*/
|
---|
55 | const char * nextCharArg;
|
---|
56 | /*@dependent@*/ /*@null@*/
|
---|
57 | poptItem currAlias;
|
---|
58 | int stuffed;
|
---|
59 | };
|
---|
60 |
|
---|
61 | struct poptContext_s {
|
---|
62 | struct optionStackEntry optionStack[POPT_OPTION_DEPTH];
|
---|
63 | /*@dependent@*/
|
---|
64 | struct optionStackEntry * os;
|
---|
65 | /*@owned@*/ /*@null@*/
|
---|
66 | const char ** leftovers;
|
---|
67 | int numLeftovers;
|
---|
68 | int nextLeftover;
|
---|
69 | /*@keep@*/
|
---|
70 | const struct poptOption * options;
|
---|
71 | int restLeftover;
|
---|
72 | /*@only@*/ /*@null@*/
|
---|
73 | const char * appName;
|
---|
74 | /*@only@*/ /*@null@*/
|
---|
75 | poptItem aliases;
|
---|
76 | int numAliases;
|
---|
77 | int flags;
|
---|
78 | /*@owned@*/ /*@null@*/
|
---|
79 | poptItem execs;
|
---|
80 | int numExecs;
|
---|
81 | /*@only@*/ /*@null@*/
|
---|
82 | const char ** finalArgv;
|
---|
83 | int finalArgvCount;
|
---|
84 | int finalArgvAlloced;
|
---|
85 | /*@dependent@*/ /*@null@*/
|
---|
86 | poptItem doExec;
|
---|
87 | /*@only@*/
|
---|
88 | const char * execPath;
|
---|
89 | int execAbsolute;
|
---|
90 | /*@only@*/
|
---|
91 | const char * otherHelp;
|
---|
92 | /*@null@*/
|
---|
93 | pbm_set * arg_strip;
|
---|
94 | };
|
---|
95 |
|
---|
96 | #ifdef HAVE_LIBINTL_H
|
---|
97 | #include <libintl.h>
|
---|
98 | #endif
|
---|
99 |
|
---|
100 | #if defined(HAVE_GETTEXT) && !defined(__LCLINT__)
|
---|
101 | #define _(foo) gettext(foo)
|
---|
102 | #else
|
---|
103 | #define _(foo) foo
|
---|
104 | #endif
|
---|
105 |
|
---|
106 | #if defined(HAVE_DCGETTEXT) && !defined(__LCLINT__)
|
---|
107 | #define D_(dom, str) dgettext(dom, str)
|
---|
108 | #define POPT_(foo) D_("popt", foo)
|
---|
109 | #else
|
---|
110 | #define D_(dom, str) str
|
---|
111 | #define POPT_(foo) foo
|
---|
112 | #endif
|
---|
113 |
|
---|
114 | #define N_(foo) foo
|
---|
115 |
|
---|
116 | #endif
|
---|