Remove some old craft
[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 #include <rpm/rpmtypes.h>
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14
15 typedef char ** ARGV_t;
16 typedef char * const *ARGV_const_t;
17
18 typedef int * ARGint_t;
19 struct ARGI_s {
20     unsigned nvals;
21     ARGint_t vals;
22 };
23 typedef struct ARGI_s * ARGI_t;
24 typedef struct ARGI_s const * const ARGI_const_t;
25
26 /** \ingroup rpmargv
27  * Print argv array elements.
28  * @param msg           output message prefix (or NULL)
29  * @param argv          argv array
30  * @param fp            output file handle (NULL uses stderr)
31  */
32 void argvPrint(const char * msg, ARGV_const_t argv, FILE * fp);
33
34 /** \ingroup rpmargv
35  * Destroy an argi array.
36  * @param argi          argi array
37  * @return              NULL always
38  */
39 ARGI_t argiFree(ARGI_t argi);
40
41
42 /** \ingroup rpmargv
43  * Create an empty argv array.
44  * @return              pointer to empty argv
45  */
46 ARGV_t argvNew(void);
47
48 /** \ingroup rpmargv
49  * Destroy an argv array.
50  * @param argv          argv array
51  * @return              NULL always
52  */
53 ARGV_t argvFree(ARGV_t argv);
54
55 /** \ingroup rpmargv
56  * Return no. of elements in argi array.
57  * @param argi          argi array
58  * @return              no. of elements
59  */
60 int argiCount(ARGI_const_t argi);
61
62 /** \ingroup rpmargv
63  * Return data from argi array.
64  * @param argi          argi array
65  * @return              argi array data address
66  */
67 ARGint_t argiData(ARGI_const_t argi);
68
69 /** \ingroup rpmargv
70  * Return no. of elements in argv array.
71  * @param argv          argv array
72  * @return              no. of elements
73  */
74 int argvCount(ARGV_const_t argv);
75
76 /** \ingroup rpmargv
77  * Return data from argv array.
78  * @param argv          argv array
79  * @return              argv array data address
80  */
81 ARGV_t argvData(ARGV_t argv);
82
83 /** \ingroup rpmargv
84  * Compare argv arrays (qsort/bsearch).
85  * @param a             1st instance address
86  * @param b             2nd instance address
87  * @return              result of comparison
88  */
89 int argvCmp(const void * a, const void * b);
90
91 /** \ingroup rpmargv
92  * Sort an argv array.
93  * @param argv          argv array
94  * @param compar        strcmp-like comparison function, or NULL for argvCmp()
95  * @return              0 always
96  */
97 int argvSort(ARGV_t argv, int (*compar)(const void *, const void *));
98
99 /** \ingroup rpmargv
100  * Find an element in an argv array.
101  * @param argv          argv array
102  * @param val           string to find
103  * @param compar        strcmp-like comparison function, or NULL for argvCmp()
104  * @return              found string (NULL on failure)
105  */
106 ARGV_t argvSearch(ARGV_const_t argv, const char *val,
107                 int (*compar)(const void *, const void *));
108
109 /** \ingroup rpmargv
110  * Add an int to an argi array.
111  * @retval *argip       argi array
112  * @param ix            argi array index (or -1 to append)
113  * @param val           int arg to add
114  * @return              0 always
115  */
116 int argiAdd(ARGI_t * argip, int ix, int val);
117
118 /** \ingroup rpmargv
119  * Add a string to an argv array.
120  * @retval *argvp       argv array
121  * @param val           string arg to append
122  * @return              0 always
123  */
124 int argvAdd(ARGV_t * argvp, const char *val);
125
126 /** \ingroup rpmargv
127  * Add a number to an argv array (converting to a string).
128  * @retval *argvp       argv array
129  * @param val           numeric arg to append
130  * @return              0 always
131  */
132 int argvAddNum(ARGV_t * argvp, int val);
133
134 /** \ingroup rpmargv
135  * Append one argv array to another.
136  * @retval *argvp       argv array
137  * @param av            argv array to append
138  * @return              0 always
139  */
140 int argvAppend(ARGV_t * argvp, ARGV_const_t av);
141
142 enum argvFlags_e {
143     ARGV_NONE           = 0,
144     ARGV_SKIPEMPTY      = (1 << 0),     /* omit empty strings from result */
145 };
146
147 typedef rpmFlags argvFlags;
148
149 /** \ingroup rpmargv
150  * Split a string into an argv array.
151  * @param str           string arg to split
152  * @param seps          seperator characters
153  * @param flags         flags to control behavior
154  * @return              argv array
155  */
156 ARGV_t argvSplitString(const char * str, const char * seps, argvFlags flags);
157
158 /** \ingroup rpmargv
159  * Split a string into an argv array.
160  * @retval *argvp       argv array
161  * @param str           string arg to split
162  * @param seps          seperator characters
163  * @return              0 always
164  */
165 int argvSplit(ARGV_t * argvp, const char * str, const char * seps);
166
167 /** \ingroup rpmargv
168  * Join an argv array into a string.
169  * @param *argv         argv array to join
170  * @param sep           seperator string to use
171  * @return              malloc'ed string
172  */
173 char *argvJoin(ARGV_const_t argv, const char *sep);
174
175 #ifdef __cplusplus
176 }
177 #endif
178
179 #endif /* _H_ARGV_ */