mh_xstrdup arguments now const
[mmh] / sbr / ext_hook.c
1 /*
2 ** ext_hook.c -- Run a program that hooks into some other system.
3 */
4
5 #include <h/mh.h>
6
7 /*
8 ** The filename arguments are given full path names.
9 ** msg_filename2 might contain a NULL pointer if not needed.
10 ** Look in the context for an error message if something goes wrong;
11 ** there is a built-in message in case one isn't specified.
12 ** Only produces the error message once.
13 */
14 int
15 ext_hook(char *hook_name, char *msg_filename1, char *msg_filename2)
16 {
17         char *hook;  /* hook program from context */
18         int status;
19
20         static int did_message = 0;  /* we've already output a message */
21
22         if (!(hook = context_find(hook_name))) {
23                 return (OK);
24         }
25         status = execprogl(mhbasename(hook), mhbasename(hook),
26                         msg_filename1, msg_filename2,
27                         (char *)NULL);
28         if (status != OK) {
29                 if (did_message) {
30                         return (NOTOK);
31                 }
32                 advise(NULL, "external hook (%s) failed.", hook);
33                 did_message = 1;
34                 return (NOTOK);
35         } else {
36                 return (OK);
37         }
38 }