/* * Match pkg against pattern, return 1 if matching, 0 otherwise or -1 on error. */ int xbps_pkgpattern_match(const char *pkg, const char *pattern) { /* simple match on "pkg" against "pattern" */ if (strcmp(pattern, pkg) == 0) return 1; /* perform relational dewey match on version number */ if (strpbrk(pattern, "<>") != NULL) return dewey_match(pattern, pkg); /* glob match */ if (strpbrk(pattern, "*?[]") != NULL) if (fnmatch(pattern, pkg, FNM_PERIOD) == 0) return 1; /* no match */ return 0; }
/* * Match pkg against pattern, return 1 if matching, 0 else */ int pkg_match(const char *pattern, const char *pkg) { if (!quick_pkg_match(pattern, pkg)) return 0; if (strchr(pattern, '{') != (char *) NULL) { /* emulate csh-type alternates */ return alternate_match(pattern, pkg); } if (strpbrk(pattern, "<>") != (char *) NULL) { int ret; /* perform relational dewey match on version number */ ret = dewey_match(pattern, pkg); if (ret < 0) errx(EXIT_FAILURE, "dewey_match returned error"); return ret; } if (strpbrk(pattern, "*?[]") != (char *) NULL) { /* glob match */ if (glob_match(pattern, pkg)) return 1; } /* no alternate, dewey or glob match -> simple compare */ if (simple_match(pattern, pkg)) return 1; /* globbing patterns and simple matches may be specified with or * without the version number, so check for both cases. */ { char *pattern_ver; int retval; pattern_ver = xasprintf("%s-[0-9]*", pattern); retval = glob_match(pattern_ver, pkg); free(pattern_ver); return retval; } }