X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/18c71e96f8f9281f570046095433df38c6785fd6:/popt-1.2/popt.h..b348deae3ddbb25802a5b533d91e06832212b48a:/popt/popt.h diff --git a/popt-1.2/popt.h b/popt/popt.h similarity index 61% rename from popt-1.2/popt.h rename to popt/popt.h index 9bac7972..e6fa8bdf 100644 --- a/popt-1.2/popt.h +++ b/popt/popt.h @@ -5,6 +5,10 @@ #ifndef H_POPT #define H_POPT +#ifdef __cplusplus +extern "C" { +#endif + #include /* for FILE * */ #define POPT_OPTION_DEPTH 10 @@ -18,9 +22,15 @@ set first in table; arg points to callback, descrip points to callback data to pass */ +#define POPT_ARG_INTL_DOMAIN 6 /* set the translation domain + for this table and any + included tables; arg points + to the domain string */ +#define POPT_ARG_VAL 7 /* arg should take value val */ #define POPT_ARG_MASK 0x0000FFFF #define POPT_ARGFLAG_ONEDASH 0x80000000 /* allow -longoption */ #define POPT_ARGFLAG_DOC_HIDDEN 0x40000000 /* don't show in help/usage */ +#define POPT_ARGFLAG_STRIP 0x20000000 /* strip this arg from argv (only applies to long args) */ #define POPT_CBFLAG_PRE 0x80000000 /* call the callback before parse */ #define POPT_CBFLAG_POST 0x40000000 /* call the callback after parse */ #define POPT_CBFLAG_INC_DATA 0x20000000 /* use data from the include line, @@ -43,20 +53,20 @@ #define POPT_CONTEXT_POSIXMEHARDER (1 << 2) /* options can't follow args */ struct poptOption { - const char * longName; /* may be NULL */ + /*@observer@*/ /*@null@*/ const char * longName; /* may be NULL */ char shortName; /* may be '\0' */ int argInfo; - void * arg; /* depends on argInfo */ + /*@shared@*/ /*@null@*/ void * arg; /* depends on argInfo */ int val; /* 0 means don't return, just update flag */ - char * descrip; /* description for autohelp -- may be NULL */ - char * argDescrip; /* argument description for autohelp */ + /*@shared@*/ /*@null@*/ const char * descrip; /* description for autohelp -- may be NULL */ + /*@shared@*/ /*@null@*/ const char * argDescrip; /* argument description for autohelp */ }; struct poptAlias { - char * longName; /* may be NULL */ + /*@owned@*/ /*@null@*/ const char * longName; /* may be NULL */ char shortName; /* may be '\0' */ int argc; - char ** argv; /* must be free()able */ + /*@owned@*/ const char ** argv; /* must be free()able */ }; extern struct poptOption poptHelpOptions[]; @@ -74,37 +84,47 @@ enum poptCallbackReason { POPT_CALLBACK_REASON_PRE, typedef void (*poptCallbackType)(poptContext con, enum poptCallbackReason reason, const struct poptOption * opt, - const char * arg, void * data); + const char * arg, const void * data); -poptContext poptGetContext(char * name, int argc, char ** argv, - const struct poptOption * options, int flags); +/*@only@*/ poptContext poptGetContext(/*@keep@*/ const char * name, + int argc, /*@keep@*/ const char ** argv, + /*@keep@*/ const struct poptOption * options, int flags); void poptResetContext(poptContext con); /* returns 'val' element, -1 on last item, POPT_ERROR_* on error */ int poptGetNextOpt(poptContext con); /* returns NULL if no argument is available */ -char * poptGetOptArg(poptContext con); +/*@observer@*/ /*@null@*/ const char * poptGetOptArg(poptContext con); /* returns NULL if no more options are available */ -char * poptGetArg(poptContext con); -char * poptPeekArg(poptContext con); -char ** poptGetArgs(poptContext con); +/*@observer@*/ /*@null@*/ const char * poptGetArg(poptContext con); +/*@observer@*/ /*@null@*/ const char * poptPeekArg(poptContext con); +/*@observer@*/ /*@null@*/ const char ** poptGetArgs(poptContext con); /* returns the option which caused the most recent error */ -char * poptBadOption(poptContext con, int flags); -void poptFreeContext(poptContext con); -int poptStuffArgs(poptContext con, char ** argv); +/*@observer@*/ const char * poptBadOption(poptContext con, int flags); +void poptFreeContext( /*@only@*/ poptContext con); +int poptStuffArgs(poptContext con, /*@keep@*/ const char ** argv); int poptAddAlias(poptContext con, struct poptAlias alias, int flags); -int poptReadConfigFile(poptContext con, char * fn); +int poptReadConfigFile(poptContext con, const char * fn); /* like above, but reads /etc/popt and $HOME/.popt along with environment vars */ int poptReadDefaultConfig(poptContext con, int useEnv); /* argv should be freed -- this allows ', ", and \ quoting, but ' is treated the same as " and both may include \ quotes */ -int poptParseArgvString(char * s, int * argcPtr, char *** argvPtr); -const char * poptStrerror(const int error); +int poptDupArgv(int argc, const char **argv, + /*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr); +int poptParseArgvString(const char * s, + /*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr); +/*@observer@*/ const char *const poptStrerror(const int error); void poptSetExecPath(poptContext con, const char * path, int allowAbsolute); void poptPrintHelp(poptContext con, FILE * f, int flags); void poptPrintUsage(poptContext con, FILE * f, int flags); void poptSetOtherOptionHelp(poptContext con, const char * text); -const char * poptGetInvocationName(poptContext con); +/*@observer@*/ const char * poptGetInvocationName(poptContext con); +/* shuffles argv pointers to remove stripped args, returns new argc */ +int poptStrippedArgv(poptContext con, int argc, char **argv); + +#ifdef __cplusplus +} +#endif #endif