#include <stdio.h>
#include <sys/wait.h>
-#include "gdb.h"
+#include <signal.h>
+#include <gdb.h>
+#include <sms.h>
#include "update.h"
-#include "sms_update_int.h"
#include "kludge.h"
-#include "smsu_int.h"
extern CONNECTION conn;
extern int code, errno;
char *str;
{
union wait waitb;
- int n, pid;
+ int n, pid, mask;
str += 8;
while (*str == ' ')
str++;
+ mask = sigblock(sigmask(SIGCHLD));
pid = fork();
switch (pid) {
case -1:
n = errno;
+ sigsetmask(mask);
log_priority = log_ERROR;
com_err(whoami, errno, ": can't fork to run install script");
code = send_object(conn, (char *)&n, INTEGER_T);
case 0:
execlp(str, str, (char *)NULL);
n = errno;
+ sigsetmask(mask);
log_priority = log_ERROR;
com_err(whoami, n, ": %s", str);
(void) send_object(conn, (char *)&n, INTEGER_T);
do {
n = wait(&waitb);
} while (n != -1 && n != pid);
+ sigsetmask(mask);
if (waitb.w_status) {
+ n = waitb.w_retcode + sms_err_base;
log_priority = log_ERROR;
- com_err(whoami, 0, "child exited with status %d", waitb.w_status);
+ com_err(whoami, n, " child exited with status %d", waitb.w_retcode);
code = send_object(conn, (char *)&n, INTEGER_T);
- if (code)
+ if (code) {
exit(1);
- }
- else {
+ }
+ } else {
code = send_ok();
if (code)
- exit(1);
+ exit(1);
}
}
}