From 89b7b67a13ebb7965cc7f13ad0595e2194a2d34c Mon Sep 17 00:00:00 2001
From: Jannis Hoffmann <jannis@fehcom.de>
Date: Wed, 3 Jul 2024 15:48:04 +0200
Subject: add sqmail-4.2.29a

---
 src/except.c | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 src/except.c

(limited to 'src/except.c')

diff --git a/src/except.c b/src/except.c
new file mode 100644
index 0000000..edee976
--- /dev/null
+++ b/src/except.c
@@ -0,0 +1,34 @@
+#include <unistd.h>
+#include "wait.h"
+#include "logmsg.h"
+#include "exit.h"
+
+#define WHO "except"
+
+int main(int argc, char **argv)
+{
+  int pid;
+  int wstat;
+
+  if (!argv[1])
+    logmsg(WHO,100,USAGE,"except program [ arg ... ]");
+
+  pid = fork();
+  if (pid == -1)
+    logmsg(WHO,111,FATAL,"unable to fork: ");
+  if (pid == 0) {
+    execvp(argv[1],argv + 1);
+    if (errno) _exit(111);
+    _exit(100);
+  }
+
+  if (wait_pid(&wstat,pid) == -1)
+    logmsg(WHO,111,FATAL,"wait failed");
+  if (wait_crashed(wstat))
+    logmsg(WHO,111,FATAL,"child crashed");
+  switch (wait_exitcode(wstat)) {
+    case 0: _exit(100);
+    case 111: logmsg(WHO,111,FATAL,"temporary child error");
+    default: _exit(0);
+  }
+}
-- 
cgit v1.2.3