From 942288dfb98a1762220da96d6a4b899d0651c6f8 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Sun, 24 Sep 2017 19:42:12 +0200 Subject: percent patterns without / match against basenames only --- xe.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'xe.c') diff --git a/xe.c b/xe.c index 1888775..19c1a26 100644 --- a/xe.c +++ b/xe.c @@ -362,6 +362,12 @@ parse_jobs(char *s) int perc_match(char *pat, char *arg) { + if (!strchr(pat, '/')) { + char *d = strrchr(arg, '/'); + if (d) + arg = d + 1; + } + char *s = strchr(pat, '%'); if (!s) @@ -382,6 +388,14 @@ perc_subst(char *pat, char *base, char *arg) { static char buf[2048]; size_t l; + char *dir = base; + + if (!strchr(pat, '/')) { + char *d = strrchr(base, '/'); + if (d) + base = d + 1; + } + char *s = strchr(pat, '%'); char *t = strchr(arg, '%'); @@ -389,7 +403,10 @@ perc_subst(char *pat, char *base, char *arg) return arg; if (s) - l = snprintf(buf, sizeof buf, "%.*s%.*s%.*s", + l = snprintf(buf, sizeof buf, "%.*s%.*s%.*s%.*s", + (int)(base - dir), + dir, + (int)(t - arg), arg, @@ -399,7 +416,10 @@ perc_subst(char *pat, char *base, char *arg) (int)(arg + strlen(arg) - t), t+1); else - l = snprintf(buf, sizeof buf, "%.*s%s%.*s", + l = snprintf(buf, sizeof buf, "%.*s%.*s%s%.*s", + (int)(base - dir), + dir, + (int)(t - arg), arg, -- cgit 1.4.1