From f6c96fc3d1c6c5e17ff3e753e2a5e847040c16b5 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Wed, 24 Aug 2016 18:39:42 -0500 Subject: [PATCH] fragment: add pkgconf_fragment_should_munge() to simplify the munging logic a bit (#94) --- libpkgconf/fragment.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/libpkgconf/fragment.c b/libpkgconf/fragment.c index f41d304..033c2af 100644 --- a/libpkgconf/fragment.c +++ b/libpkgconf/fragment.c @@ -38,6 +38,26 @@ pkgconf_fragment_is_unmergeable(const char *string) return false; } +static inline bool +pkgconf_fragment_should_munge(const char *string, const char *sysroot_dir) +{ + static struct pkgconf_fragment_check check_fragments[] = { + {"-isystem", 8}, + }; + + if (*string != '/') + return false; + + if (sysroot_dir != NULL && strncmp(sysroot_dir, string, strlen(sysroot_dir))) + return true; + + for (size_t i = 0; i < PKGCONF_ARRAY_SIZE(check_fragments); i++) + if (!strncmp(string, check_fragments[i].token, check_fragments[i].len)) + return true; + + return false; +} + static inline bool pkgconf_fragment_is_special(const char *string) { @@ -61,8 +81,7 @@ pkgconf_fragment_copy_munged(const char *source, unsigned int flags) sysroot_dir = pkgconf_tuple_find_global("pc_sysrootdir"); - if (*source != '/' || - (sysroot_dir != NULL && !strncmp(sysroot_dir, source, strlen(sysroot_dir)))) + if (!pkgconf_fragment_should_munge(source, sysroot_dir)) return strdup(source); strlcpy(mungebuf, sysroot_dir, sizeof mungebuf);