[Rpm-maint] [PATCH 2/4] Fixes missing glob_pattern_p on mac.
Giulio Eulisse
Giulio.Eulisse at cern.ch
Tue Apr 20 09:42:04 UTC 2010
The weak_alias used to assign __glob_pattern_p to glob_pattern_p does not get
executed on mac. I tried specifing #pragma weak but it does not work as well
so in the end I solved the problem by duplicating the function where needed.
---
build/files.c | 33 ++++++++++++++++++++++++++++++++-
rpmio/rpmfileutil.c | 33 ++++++++++++++++++++++++++++++++-
2 files changed, 64 insertions(+), 2 deletions(-)
-------------- next part --------------
diff --git a/build/files.c b/build/files.c
index 7db729a..79020ba 100644
--- a/build/files.c
+++ b/build/files.c
@@ -1656,6 +1656,37 @@ exit:
return rc;
}
+static int
+__glob_pattern_p (const char *pattern, int quote)
+{
+ register const char *p;
+ int open = 0;
+
+ for (p = pattern; *p != '\0'; ++p)
+ switch (*p)
+ {
+ case '?':
+ case '*':
+ return 1;
+
+ case '\\':
+ if (quote && p[1] != '\0')
+ ++p;
+ break;
+
+ case '[':
+ open = 1;
+ break;
+
+ case ']':
+ if (open)
+ return 1;
+ break;
+ }
+
+ return 0;
+}
+
/**
* Add a file to a binary package.
* @param pkg
@@ -1670,7 +1701,7 @@ static rpmRC processBinaryFile(Package pkg, FileList fl, const char * fileName)
char *diskPath = NULL;
int rc = RPMRC_OK;
- doGlob = glob_pattern_p(fileName, quote);
+ doGlob = __glob_pattern_p(fileName, quote);
/* Check that file starts with leading "/" */
if (*fileName != '/') {
diff --git a/rpmio/rpmfileutil.c b/rpmio/rpmfileutil.c
index cb36ebe..d762292 100644
--- a/rpmio/rpmfileutil.c
+++ b/rpmio/rpmfileutil.c
@@ -543,6 +543,37 @@ char * rpmGetPath(const char *path, ...)
return rpmCleanPath(res);
}
+static int
+__glob_pattern_p (const char *pattern, int quote)
+{
+ register const char *p;
+ int open = 0;
+
+ for (p = pattern; *p != '\0'; ++p)
+ switch (*p)
+ {
+ case '?':
+ case '*':
+ return 1;
+
+ case '\\':
+ if (quote && p[1] != '\0')
+ ++p;
+ break;
+
+ case '[':
+ open = 1;
+ break;
+
+ case ']':
+ if (open)
+ return 1;
+ break;
+ }
+
+ return 0;
+}
+
int rpmGlob(const char * patterns, int * argcPtr, ARGV_t * argvPtr)
{
int ac = 0;
@@ -588,7 +619,7 @@ int rpmGlob(const char * patterns, int * argcPtr, ARGV_t * argvPtr)
int local = (ut == URL_IS_PATH) || (ut == URL_IS_UNKNOWN);
glob_t gl;
- if (!local || (!glob_pattern_p(av[j], 0) && strchr(path, '~') == NULL)) {
+ if (!local || (!__glob_pattern_p(av[j], 0) && strchr(path, '~') == NULL)) {
argvAdd(&argv, av[j]);
continue;
}
More information about the Rpm-maint
mailing list