-char *extend(char *path, char *ext) {
- char *bp, *e, *dp, *r;
- size_t b, d, l;
-
- bp = (bp = strrchr(dp = path, '/')) ? bp + 1 : dp;
- d = bp - dp;
- b = (e = strrchr(bp, '.')) ? e - bp : (e = ext, strlen(bp));
- if (ext[0] == '!') e = ext + 1;
- if (strcmp(e, DYEXT) == 0) {
- if (!(dp = realpath(path = d ? strndup(dp, d) : "./", NULL)))
- err(EXIT_FAILURE, "Unable to resolve `%s'", path);
+char *extend(char *path, char *altext) {
+ char *dir, *base, *ext, *result;
+ size_t d, b, l;
+
+ base = (base = strrchr(dir = path, '/')) ? base + 1 : dir;
+ d = base - dir;
+ b = (ext = strrchr(base, '.')) ? ext - base : (ext = altext, strlen(base));
+ if (altext[0] == '!') ext = altext + 1;
+ if (strcmp(ext, DYEXT) == 0) {
+ if (!(dir = realpath(path = d ? strndup(dir, d) : "./", NULL)))
+ err(errno, "Unable to resolve `%s'", path);