[206] | 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
|
---|