X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fviamail.c;h=2176200200210d45c426788ae9bc6a3534458955;hb=f8baa5a34335fc0fc8ccabfabc601d0af73ab769;hp=e9b26b76e3eb63c3cfae266cb75aa82de1181504;hpb=58d753387922687855f06192264154c52949d3ff;p=mmh diff --git a/uip/viamail.c b/uip/viamail.c index e9b26b7..2176200 100644 --- a/uip/viamail.c +++ b/uip/viamail.c @@ -64,6 +64,7 @@ main (int argc, char **argv) int delay = 0; char *f1 = NULL, *f2 = NULL, *f3 = NULL; char *f4 = NULL, *f5 = NULL, *f7 = NULL; + static char postpath[PATH_MAX]; char *cp, buf[BUFSIZ]; char **argp, **arguments; @@ -149,6 +150,34 @@ main (int argc, char **argv) if (!f1) adios (NULL, "missing -viamail \"mailpath\" switch"); + /* viamail doesn't read the context and postproc isn't always what + we want, such as when running make distcheck. If we have the + absolute path, set postproc to point to post in the same + directory as this executable. + This could be generalized to handle relative paths (by + converting to absolute), to find the full path from PATH given + just the basename, and to squash out ../ but it's only needed + here. viamail is typically called from sendfiles, which + provides the absolute path. + */ + if (argv[0] && argv[0][0] == '/' && + strlen(argv[0]) - 3 < sizeof postpath) { + strncpy (postpath, argv[0], sizeof postpath - 1); + postpath[sizeof postpath - 1] = '\0'; + if ((cp = strrchr (postpath, '/'))) { + struct stat st; + + *(cp + 1) = '\0'; + /* strlen ("post") <= sizeof postpath - (cp - postpath) - 2 + but use strncat just in case the code above changes. */ + strncat (postpath, "post", sizeof postpath - (cp - postpath) - 2); + + if (stat (postpath, &st) == OK) { + postproc = postpath; + } + } + } + via_mail (f1, f2, f3, f4, f5, delay, f7); return 0; /* dead code to satisfy the compiler */ }