[pacman-dev] [PATCH 2/3] Optionally pass root path to fnmatch_patterns
Allan McRae
allan at archlinux.org
Mon Nov 17 13:33:13 UTC 2014
When the system root is passed to fnmatch_patterns, it is stripped from
the start of the string before comparisions are made.
Signed-off-by: Allan McRae <allan at archlinux.org>
---
lib/libalpm/add.c | 4 ++--
src/common/util-common.c | 9 ++++++++-
src/common/util-common.h | 2 +-
3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index 9f7c9fa..604e0c7 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -190,7 +190,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
}
/* if a file is in NoExtract then we never extract it */
- if(fnmatch_patterns(handle->noextract, entryname) == 0) {
+ if(fnmatch_patterns(handle->noextract, entryname, NULL) == 0) {
_alpm_log(handle, ALPM_LOG_DEBUG, "%s is in NoExtract,"
" skipping extraction of %s\n",
entryname, filename);
@@ -266,7 +266,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
} else {
/* case 3: */
/* if file is in NoUpgrade, don't touch it */
- if(fnmatch_patterns(handle->noupgrade, entryname) == 0) {
+ if(fnmatch_patterns(handle->noupgrade, entryname, NULL) == 0) {
notouch = 1;
} else {
alpm_backup_t *backup;
diff --git a/src/common/util-common.c b/src/common/util-common.c
index 1930d64..63355a4 100644
--- a/src/common/util-common.c
+++ b/src/common/util-common.c
@@ -110,14 +110,21 @@ int llstat(char *path, struct stat *buf)
* escaped. Subsequent matches override previous ones.
* @param patterns patterns to match against
* @param string string to check against pattern
+ * @param root prefix to be stripped from string before comparison
* @return 0 if string matches pattern, negative if they don't match and
* positive if the last match was inverted
*/
-int fnmatch_patterns(alpm_list_t *patterns, const char *string)
+int fnmatch_patterns(alpm_list_t *patterns, const char *string, const char *root)
{
alpm_list_t *i;
char *pattern;
short inverted;
+ size_t len = 0;
+
+ if(root) {
+ len = strlen(root);
+ }
+ string = string + len;
for(i = alpm_list_last(patterns); i; i = alpm_list_previous(i)) {
pattern = i->data;
diff --git a/src/common/util-common.h b/src/common/util-common.h
index 17f8d87..e731e52 100644
--- a/src/common/util-common.h
+++ b/src/common/util-common.h
@@ -30,7 +30,7 @@ char *mdirname(const char *path);
int llstat(char *path, struct stat *buf);
-int fnmatch_patterns(alpm_list_t *patterns, const char *string);
+int fnmatch_patterns(alpm_list_t *patterns, const char *string, const char *root);
char *safe_fgets(char *s, int size, FILE *stream);
--
2.1.3
More information about the pacman-dev
mailing list