remove msg-hook config option
[mmh] / sbr / ext_hook.c
index d228848..3693d8b 100644 (file)
@@ -1,61 +1,38 @@
-/*     $Id$
- *
- *     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
- *     something goes wrong; there is a built-in message in case one isn't specified.
- *     Only produce the error message once.
- */
+/*
+** ext_hook.c -- Run a program that hooks into some other system.
+*/
 
 #include <h/mh.h>
 
+/*
+** The filename arguments are given full path names.
+** msg_filename2 might contain a NULL pointer if not needed.
+** Look in the context for an error message if something goes wrong;
+** there is a built-in message in case one isn't specified.
+** Only produces the error message once.
+*/
 int
-ext_hook(char *hook_name, char *message_file_name_1, char *message_file_name_2)
+ext_hook(char *hook_name, char *msg_filename1, char *msg_filename2)
 {
-    char       *hook;                  /* hook program from context */
-    pid_t      pid;                    /* ID of child process */
-    int                status;                 /* exit or other child process status */
-    char       *vec[4];                /* argument vector for child process */
+       char *hook;  /* hook program from context */
+       int status;
 
-    static  int        did_message = 0;        /* set if we've already output a message */
+       static int did_message = 0;  /* we've already output a message */
 
-    if ((hook = context_find(hook_name)) == (char *)0)
-       return (OK);
-
-    switch (pid = vfork()) {
-    case -1:
-       status = NOTOK;
-       advise(NULL, "external database may be out-of-date.");
-       break;
-
-    case 0:
-       vec[0] = r1bindex(hook, '/');
-       vec[1] = message_file_name_1;
-       vec[2] = message_file_name_2;
-       vec[3] = (char *)0;
-       execvp(hook, vec);
-       _exit(-1);
-       /* NOTREACHED */
-
-    default:
-       status = pidwait(pid, -1);
-       break;
-    }
-
-    if (status != OK) {
-       if (did_message == 0) {
-           if ((hook = context_find("msg-hook")) != (char *)0)
-               advise(NULL, hook);
-           else
-               advise(NULL, "external hook (%s) did not work properly.", hook);
-       
-           did_message = 1;
+       if (!(hook = context_find(hook_name))) {
+               return (OK);
+       }
+       status = execprogl(mhbasename(hook), mhbasename(hook),
+                       msg_filename1, msg_filename2,
+                       (char *)NULL);
+       if (status != OK) {
+               if (did_message) {
+                       return (NOTOK);
+               }
+               advise(NULL, "external hook (%s) failed.", hook);
+               did_message = 1;
+               return (NOTOK);
+       } else {
+               return (OK);
        }
-
-       return (NOTOK);
-    }
-
-    else
-       return (OK);
 }