23 if (fp ==
NULL) fp = stderr;
26 fprintf(fp,
"===================================== %s\n", msg);
29 for (av = argv; *
av; av++)
49 for (av = argv; *
av; av++)
66 if (argi && argi->
nvals > 0)
75 while (argv[argc] !=
NULL)
91 return ((aint < bint) ? -1 :
92 (aint > bint) ? +1 : 0);
109 #if defined(RPM_VENDOR_OPENPKG)
114 return (
fnmatch(astr, bstr, 0) == 0 ? 0 : 1);
132 qsort(vals, nvals,
sizeof(*vals),
133 (
int(*)(
const void *,
const void *))compar);
142 (
int(*)(
const void *,
const void *))compar);
154 (
int(*)(
const void *,
const void *))compar);
157 #if defined(RPM_VENDOR_OPENPKG)
168 for (av = argv; *av !=
NULL; av++) {
169 if (compar(av, &val) == 0) {
189 if (ix >= (
int)argi->
nvals) {
192 (ix - argi->
nvals) *
sizeof(*argi->
vals));
193 argi->
nvals = ix + 1;
208 *argvp = (
ARGV_t)
xrealloc(*argvp, (argc + 1 + 1) *
sizeof(**argvp));
220 if (av !=
NULL && ac > 0) {
226 argv[argc++] =
xstrdup(av[-1]);
235 static char whitespace[] =
" \f\n\r\t\v";
236 char * dest = (
char *)
xmalloc(strlen(str) + 1);
246 for (argc = 1, s = str, t = dest; (c = (
int) *s); s++, t++) {
247 if (strchr(seps, c) && !(s[0] ==
':' && s[1] ==
'/' && s[2] ==
'/')) {
257 for (c = 0, s = dest; s <
t; s += strlen(s) + 1) {
259 if (seps == whitespace && s[0] ==
'\0')
280 for (argc = 0; argv[argc] !=
NULL; argc++) {
283 nb += strlen(argv[argc]);
289 for (argc = 0; argv[argc] !=
NULL; argc++) {
292 te =
stpcpy(te, argv[argc]);
302 FILE * fp = (fd ? (FILE *)
fdGetFILE(fd) : stdin);
310 while (!rc && (b = fgets(buf, (
int)
sizeof(buf), fp)) !=
NULL) {
311 buf[
sizeof(
buf)-1] =
'\0';
312 be = b + strlen(buf);
314 while (strchr(
"\r\n", *be) !=
NULL)
322 rc = (feof(fp) ? 0 : 1);
qsort(mc->macroTable, mc->firstFree, sizeof(mc->macroTable[0]), compareMacroName)
ARGI_t argiFree(ARGI_t argi)
Destroy an argi array.
char * xstrdup(const char *str)
static char *size_t nb
fgets(3) analogue that reads \ continuations.
int argvStrcasecmp(ARGstr_t *a, ARGstr_t *b)
Compare argv elements using strcasecmp (qsort/bsearch).
int argvAppend(ARGV_t *argvp, ARGV_t av)
Append one argv array to another.
int argiCount(ARGI_t argi)
Return no.
char * argvJoin(ARGV_t argv, char sep)
Concatenate an argv array into a string.
memset(_r, 0, sizeof(*_r))
void * xcalloc(size_t nmemb, size_t size)
fprintf(stderr,"--> %s(%p,%p,%p) sig %p sigp %p\n", __FUNCTION__, dig, t, rsactx, sig, sigp)
int argvCount(const ARGV_t argv)
Return no.
ARGV_t argvData(ARGV_t argv)
Return data from argv array.
int argiCmp(ARGint_t *a, ARGint_t *b)
Compare argi elements (qsort/bsearch).
ARGV_t argvFree(ARGV_t argv)
Destroy an argv array.
The FD_t File Handle data structure.
int argiSort(ARGI_t argi, int(*compar)(ARGint_t *, ARGint_t *))
Sort an argi array.
int argvAdd(ARGV_t *argvp, ARGstr_t val)
Add a string to an argv array.
void argvPrint(const char *msg, ARGV_t argv, FILE *fp)
Print argv array elements.
int fnmatch(char *__pattern, char *__name, int __flags)
static const char *char c
Return text between pl and matching pr characters.
return strcmp(ame->name, bme->name)
int xstrcasecmp(const char *s1, const char *s2)
Locale insensitive strcasecmp(3).
char * stpcpy(char *dest, const char *src)
int argvFgets(ARGV_t *argvp, void *_fd)
Read lines into an argv array.
int argiAdd(ARGI_t *argip, int ix, int val)
Add an int to an argi array.
int argvSplit(ARGV_t *argvp, const char *str, const char *seps)
Split a string into an argv array.
ARGV_t argvSearch(ARGV_t argv, ARGstr_t val, int(*compar)(ARGstr_t *, ARGstr_t *))
Find an element in an argv array.
int argvSort(ARGV_t argv, int(*compar)(ARGstr_t *, ARGstr_t *))
Sort an argv array.
char * buf
Parse (and execute) macro undefinition.
int
Save source and expand field into target.
int argvCmp(ARGstr_t *a, ARGstr_t *b)
Compare argv elements using strcmp (qsort/bsearch).
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
ARGint_t argiData(ARGI_t argi)
Return data from argi array.