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