summaryrefslogtreecommitdiff
path: root/rpmio/rpmglob.c
diff options
context:
space:
mode:
authorMichal Domonkos <mdomonko@redhat.com>2022-05-23 14:38:02 +0200
committerPanu Matilainen <pmatilai@redhat.com>2022-08-18 12:33:00 +0300
commitce6247e9e3b5e7719d777488757aa51b8229c187 (patch)
tree61847f389968030c138dad48def9aba352bf602d /rpmio/rpmglob.c
parent9ddb2508c893d45560b54fc78b488e3622fd6be3 (diff)
downloadrpm-ce6247e9e3b5e7719d777488757aa51b8229c187.tar.gz
Append to arglist in rpmGlob()
Instead of constructing a new list from scratch and returning that, just extend the passed list. This makes it easier to use this function incrementally when expanding multiple patterns in a loop, such as during package manifest parsing which we adapt here right away. Preserve the ability to pass NULL as argvPtr and still get a match count via argcPtr, by keeping the local argv around for that case. No functional change.
Diffstat (limited to 'rpmio/rpmglob.c')
-rw-r--r--rpmio/rpmglob.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/rpmio/rpmglob.c b/rpmio/rpmglob.c
index 5595e16e3..c299cf932 100644
--- a/rpmio/rpmglob.c
+++ b/rpmio/rpmglob.c
@@ -74,6 +74,10 @@ int rpmGlob(const char * pattern, int * argcPtr, ARGV_t * argvPtr)
int i;
int rc = 0;
+ if (argvPtr == NULL)
+ /* We still want to count matches so use a scratch list */
+ argvPtr = &argv;
+
flags |= GLOB_BRACE;
if (home != NULL && strlen(home) > 0)
@@ -91,7 +95,7 @@ int rpmGlob(const char * pattern, int * argcPtr, ARGV_t * argvPtr)
#endif
if (!local || !ismagic(pattern)) {
- argvAdd(&argv, pattern);
+ argvAdd(argvPtr, pattern);
goto exit;
}
@@ -145,16 +149,14 @@ int rpmGlob(const char * pattern, int * argcPtr, ARGV_t * argvPtr)
if (globRoot > globURL && globRoot[-1] == '/')
while (*globFile == '/') globFile++;
strcpy(globRoot, globFile);
- argvAdd(&argv, globURL);
+ argvAdd(argvPtr, globURL);
}
globfree(&gl);
free(globURL);
exit:
- argc = argvCount(argv);
+ argc = argvCount(*argvPtr);
if (argc > 0) {
- if (argvPtr)
- *argvPtr = argv;
if (argcPtr)
*argcPtr = argc;
rc = 0;
@@ -172,8 +174,6 @@ exit:
free(old_ctype);
}
#endif
- if (rc || argvPtr == NULL) {
- argvFree(argv);
- }
+ argvFree(argv);
return rc;
}