Upgrade from popt 1.2 to a cut-down 1.5
[rsync/rsync.git] / popt / popt.h
similarity index 61%
rename from popt-1.2/popt.h
rename to popt/popt.h
index 9bac797..e6fa8bd 100644 (file)
@@ -5,6 +5,10 @@
 #ifndef H_POPT
 #define H_POPT
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <stdio.h>                     /* for FILE * */
 
 #define POPT_OPTION_DEPTH      10
                                           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,
 #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