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 @*/ 27typedef 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 @*/ 33typedef 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 45struct 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 61struct 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