X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/8a14191c0a0ad15bb8f35b49748c75c1e0a8c2f4..af32d40a8ca0b341c082066b2f1e3e83005c1a89:/sbr/ext_hook.c diff --git a/sbr/ext_hook.c b/sbr/ext_hook.c index d29c046a..106114f8 100644 --- a/sbr/ext_hook.c +++ b/sbr/ext_hook.c @@ -1,6 +1,4 @@ -/* - * - * Run a program that hooks into some other system. The first argument is +/* Run a program that hooks into some other system. The first argument is * name of the hook to use, the second is the full path name of a mail message. * The third argument is also the full path name of a mail message, or a NULL * pointer if it isn't needed. Look in the context for an error message if @@ -8,7 +6,11 @@ * Only produce the error message once. */ -#include +#include "h/mh.h" +#include "context_find.h" +#include "pidstatus.h" +#include "arglist.h" +#include "error.h" int ext_hook(char *hook_name, char *message_file_name_1, char *message_file_name_2) @@ -20,10 +22,10 @@ ext_hook(char *hook_name, char *message_file_name_1, char *message_file_name_2) int vecp; /* Vector index */ char *program; /* Name of program to execute */ - static int did_message = 0; /* set if we've already output a message */ + static bool did_message; /* set if we've already output a message */ if ((hook = context_find(hook_name)) == NULL) - return (OK); + return OK; switch (pid = fork()) { case -1: @@ -38,7 +40,7 @@ ext_hook(char *hook_name, char *message_file_name_1, char *message_file_name_2) vec[vecp++] = NULL; execvp(program, vec); advise(program, "Unable to execute"); - _exit(-1); + _exit(1); /* NOTREACHED */ default: @@ -46,22 +48,20 @@ ext_hook(char *hook_name, char *message_file_name_1, char *message_file_name_2) break; } - if (status != OK) { - if (did_message == 0) { - char *msghook; - if ((msghook = context_find("msg-hook")) != NULL) - inform(msghook); - else { - char errbuf[BUFSIZ]; - snprintf(errbuf, sizeof(errbuf), "external hook \"%s\"", hook); - pidstatus(status, stderr, errbuf); - } - did_message = 1; - } + if (status == OK) + return OK; - return (NOTOK); + if (!did_message) { + char *msghook; + if ((msghook = context_find("msg-hook")) != NULL) + inform("%s", msghook); + else { + char errbuf[BUFSIZ]; + snprintf(errbuf, sizeof(errbuf), "external hook \"%s\"", hook); + pidstatus(status, stderr, errbuf); + } + did_message = true; } - else - return (OK); + return NOTOK; }