Blame rpmio/argv.h

2ff057
#ifndef _H_ARGV_
2ff057
#define	_H_ARGV_
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * \file rpmio/argv.h
2ff057
 *
2ff057
 * Argument Manipulation API.
2ff057
 */
2ff057
2ff057
#include <stdio.h>
2ff057
#include <rpm/rpmtypes.h>
2ff057
2ff057
#ifdef __cplusplus
2ff057
extern "C" {
2ff057
#endif
2ff057
2ff057
typedef char ** ARGV_t;
2ff057
typedef char * const *ARGV_const_t;
2ff057
2ff057
typedef	int * ARGint_t;
2ff057
struct ARGI_s {
2ff057
    unsigned nvals;
2ff057
    ARGint_t vals;
2ff057
};
2ff057
typedef	struct ARGI_s * ARGI_t;
2ff057
typedef	struct ARGI_s const * const ARGI_const_t;
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Print argv array elements.
2ff057
 * @param msg		output message prefix (or NULL)
2ff057
 * @param argv		argv array
2ff057
 * @param fp		output file handle (NULL uses stderr)
2ff057
 */
2ff057
void argvPrint(const char * msg, ARGV_const_t argv, FILE * fp);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Destroy an argi array.
2ff057
 * @param argi		argi array
2ff057
 * @return		NULL always
2ff057
 */
2ff057
ARGI_t argiFree(ARGI_t argi);
2ff057
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Create an empty argv array.
2ff057
 * @return		pointer to empty argv
2ff057
 */
2ff057
ARGV_t argvNew(void);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Destroy an argv array.
2ff057
 * @param argv		argv array
2ff057
 * @return		NULL always
2ff057
 */
2ff057
ARGV_t argvFree(ARGV_t argv);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Return no. of elements in argi array.
2ff057
 * @param argi		argi array
2ff057
 * @return		no. of elements
2ff057
 */
2ff057
int argiCount(ARGI_const_t argi);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Return data from argi array.
2ff057
 * @param argi		argi array
2ff057
 * @return		argi array data address
2ff057
 */
2ff057
ARGint_t argiData(ARGI_const_t argi);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Return no. of elements in argv array.
2ff057
 * @param argv		argv array
2ff057
 * @return		no. of elements
2ff057
 */
2ff057
int argvCount(ARGV_const_t argv);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Return data from argv array.
2ff057
 * @param argv		argv array
2ff057
 * @return		argv array data address
2ff057
 */
2ff057
ARGV_t argvData(ARGV_t argv);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Compare argv arrays (qsort/bsearch).
2ff057
 * @param a		1st instance address
2ff057
 * @param b		2nd instance address
2ff057
 * @return		result of comparison
2ff057
 */
2ff057
int argvCmp(const void * a, const void * b);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Sort an argv array.
2ff057
 * @param argv		argv array
2ff057
 * @param compar	strcmp-like comparison function, or NULL for argvCmp()
2ff057
 * @return		0 always
2ff057
 */
2ff057
int argvSort(ARGV_t argv, int (*compar)(const void *, const void *));
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Find an element in an argv array.
2ff057
 * @param argv		argv array
2ff057
 * @param val		string to find
2ff057
 * @param compar	strcmp-like comparison function, or NULL for argvCmp()
2ff057
 * @return		found string (NULL on failure)
2ff057
 */
2ff057
ARGV_t argvSearch(ARGV_const_t argv, const char *val,
2ff057
		int (*compar)(const void *, const void *));
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Add an int to an argi array.
2ff057
 * @retval *argip	argi array
2ff057
 * @param ix		argi array index (or -1 to append)
2ff057
 * @param val		int arg to add
2ff057
 * @return		0 always
2ff057
 */
2ff057
int argiAdd(ARGI_t * argip, int ix, int val);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Add a string to an argv array.
2ff057
 * @retval *argvp	argv array
2ff057
 * @param val		string arg to append
2ff057
 * @return		0 always
2ff057
 */
2ff057
int argvAdd(ARGV_t * argvp, const char *val);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Add a number to an argv array (converting to a string).
2ff057
 * @retval *argvp	argv array
2ff057
 * @param val		numeric arg to append
2ff057
 * @return		0 always
2ff057
 */
2ff057
int argvAddNum(ARGV_t * argvp, int val);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Append one argv array to another.
2ff057
 * @retval *argvp	argv array
2ff057
 * @param av		argv array to append
2ff057
 * @return		0 always
2ff057
 */
2ff057
int argvAppend(ARGV_t * argvp, ARGV_const_t av);
2ff057
2ff057
enum argvFlags_e {
2ff057
    ARGV_NONE		= 0,
2ff057
    ARGV_SKIPEMPTY	= (1 << 0),	/* omit empty strings from result */
2ff057
};
2ff057
2ff057
typedef rpmFlags argvFlags;
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Split a string into an argv array.
2ff057
 * @param str		string arg to split
2ff057
 * @param seps		separator characters
2ff057
 * @param flags		flags to control behavior
2ff057
 * @return		argv array
2ff057
 */
2ff057
ARGV_t argvSplitString(const char * str, const char * seps, argvFlags flags);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Split a string into an argv array.
2ff057
 * @retval *argvp	argv array
2ff057
 * @param str		string arg to split
2ff057
 * @param seps		separator characters
2ff057
 * @return		0 always
2ff057
 */
2ff057
int argvSplit(ARGV_t * argvp, const char * str, const char * seps);
2ff057
2ff057
/** \ingroup rpmargv
2ff057
 * Join an argv array into a string.
2ff057
 * @param *argv		argv array to join
2ff057
 * @param sep		separator string to use
2ff057
 * @return		malloc'ed string
2ff057
 */
2ff057
char *argvJoin(ARGV_const_t argv, const char *sep);
2ff057
2ff057
#ifdef __cplusplus
2ff057
}
2ff057
#endif
2ff057
2ff057
#endif /* _H_ARGV_ */