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@*/ /*@relnull@*/ 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 117