More missing system includes for size_t & friends
[platform/upstream/rpm.git] / rpmio / argv.h
1 #ifndef _H_ARGV_
2 #define _H_ARGV_
3
4 /** \ingroup rpmargv
5  * \file rpmio/argv.h
6  */
7
8 #include <stdio.h>
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13
14 typedef const char * ARGstr_t;
15 typedef ARGstr_t * ARGV_t;
16
17 typedef int * ARGint_t;
18 struct ARGI_s {
19     unsigned nvals;
20     ARGint_t vals;
21 };
22 typedef struct ARGI_s * ARGI_t;
23
24 /** \ingroup rpmargv
25  * Print argv array elements.
26  * @param msg           output message prefix (or NULL)
27  * @param argv          argv array
28  * @param fp            output file handle (NULL uses stderr)
29  */
30 void argvPrint(const char * msg, ARGV_t argv, FILE * fp);
31
32 /** \ingroup rpmargv
33  * Destroy an argi array.
34  * @param argi          argi array
35  * @return              NULL always
36  */
37 ARGI_t argiFree(ARGI_t argi);
38
39 /** \ingroup rpmargv
40  * Destroy an argv array.
41  * @param argv          argv array
42  * @return              NULL always
43  */
44 ARGV_t argvFree(ARGV_t argv);
45
46 /** \ingroup rpmargv
47  * Return no. of elements in argi array.
48  * @param argi          argi array
49  * @return              no. of elements
50  */
51 int argiCount(const ARGI_t argi);
52
53 /** \ingroup rpmargv
54  * Return data from argi array.
55  * @param argi          argi array
56  * @return              argi array data address
57  */
58 ARGint_t argiData(const ARGI_t argi);
59
60 /** \ingroup rpmargv
61  * Return no. of elements in argv array.
62  * @param argv          argv array
63  * @return              no. of elements
64  */
65 int argvCount(const ARGV_t argv);
66
67 /** \ingroup rpmargv
68  * Return data from argv array.
69  * @param argv          argv array
70  * @return              argv array data address
71  */
72 ARGV_t argvData(const ARGV_t argv);
73
74 /** \ingroup rpmargv
75  * Compare argv arrays (qsort/bsearch).
76  * @param a             1st instance address
77  * @param b             2nd instance address
78  * @return              result of comparison
79  */
80 int argvCmp(const void * a, const void * b);
81
82 /** \ingroup rpmargv
83  * Sort an argv array.
84  * @param argv          argv array
85  * @param compar        strcmp-like comparison function, or NULL for argvCmp()
86  * @return              0 always
87  */
88 int argvSort(ARGV_t argv, int (*compar)(const void *, const void *));
89
90 /** \ingroup rpmargv
91  * Find an element in an argv array.
92  * @param argv          argv array
93  * @param val           string to find
94  * @param compar        strcmp-like comparison function, or NULL for argvCmp()
95  * @return              found string (NULL on failure)
96  */
97 ARGV_t argvSearch(ARGV_t argv, ARGstr_t val,
98                 int (*compar)(const void *, const void *));
99
100 /** \ingroup rpmargv
101  * Add an int to an argi array.
102  * @retval *argip       argi array
103  * @param ix            argi array index (or -1 to append)
104  * @param val           int arg to add
105  * @return              0 always
106  */
107 int argiAdd(ARGI_t * argip, int ix, int val);
108
109 /** \ingroup rpmargv
110  * Add a string to an argv array.
111  * @retval *argvp       argv array
112  * @param val           string arg to append
113  * @return              0 always
114  */
115 int argvAdd(ARGV_t * argvp, ARGstr_t val);
116
117 /** \ingroup rpmargv
118  * Append one argv array to another.
119  * @retval *argvp       argv array
120  * @param av            argv array to append
121  * @return              0 always
122  */
123 int argvAppend(ARGV_t * argvp, const ARGV_t av);
124
125 /** \ingroup rpmargv
126  * Split a string into an argv array.
127  * @retval *argvp       argv array
128  * @param str           string arg to split
129  * @param seps          seperator characters
130  * @return              0 always
131  */
132 int argvSplit(ARGV_t * argvp, const char * str, const char * seps);
133
134 #ifdef __cplusplus
135 }
136 #endif
137
138 #endif /* _H_ARGV_ */