]> git.wh0rd.org - dump.git/blobdiff - dump/tape.c
cybercable -> noos.
[dump.git] / dump / tape.c
index 69715003e67bf772103bfad8d0b5d996a64c03ec..545c78fd0c5778dbab784d5b8a7dfc6e89f95c86 100644 (file)
@@ -2,7 +2,8 @@
  *     Ported to Linux's Second Extended File System as part of the
  *     dump and restore backup suit
  *     Remy Card <card@Linux.EU.Org>, 1994-1997
- *     Stelian Pop <pop@cybercable.fr>, 1999-2000
+ *     Stelian Pop <pop@noos.fr>, 1999-2000
+ *     Stelian Pop <pop@noos.fr> - AlcĂ´ve <www.alcove.fr>, 2000
  */
 
 /*-
@@ -40,7 +41,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: tape.c,v 1.19 2000/05/28 16:24:14 stelian Exp $";
+       "$Id: tape.c,v 1.25 2000/12/04 15:43:16 stelian Exp $";
 #endif /* not lint */
 
 #ifdef __linux__
@@ -422,7 +423,11 @@ int system_command(const char *command, const char *device, int volnum) {
        if (pid == 0) {
                setuid(getuid());
                setgid(getgid());
+#if OLD_STYLE_FSCRIPT
+               snprintf(commandstr, sizeof(commandstr), "%s", command);
+#else
                snprintf(commandstr, sizeof(commandstr), "%s %s %d", command, device, volnum);
+#endif
                commandstr[sizeof(commandstr) - 1] = '\0';
                execl("/bin/sh", "sh", "-c", commandstr, NULL);
                perror("  DUMP: unable to execute shell");
@@ -873,9 +878,9 @@ Exit(int status)
 static void
 proceed(int signo)
 {
-       caught++;
        if (ready)
                siglongjmp(jmpbuf, 1);
+       caught++;
 }
 
 void
@@ -891,6 +896,8 @@ enslave(void)
        master = getpid();
 
     {  struct sigaction sa;
+       memset(&sa, 0, sizeof sa);
+       sigemptyset(&sa.sa_mask);
        sa.sa_handler = dumpabort;
        sigaction(SIGTERM, &sa, NULL); /* Slave sends SIGTERM on dumpabort() */
        sa.sa_handler = sigpipe;
@@ -1077,6 +1084,7 @@ doslave(int cmd, int slave_number)
                if (wrote < 0) {
                        (void) kill(master, SIGUSR1);
                        sigemptyset(&sigset);
+                       sigaddset(&sigset, SIGINT);
                        for (;;)
                                sigsuspend(&sigset);
                } else {