Home | History | Annotate | Download | only in libpopt
      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