X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=dump%2Ftape.c;h=71de659ba9f40cc8b60d243d209140155ea105f2;hb=1733496b97c4003ff6d9cf9cc10f9d4fd0bf6753;hp=8d8933f6eea8079fcf87e719101142e6bc5a97a3;hpb=88ef261eaffd1b09f23eb73d8259336f694d9324;p=dump.git diff --git a/dump/tape.c b/dump/tape.c index 8d8933f..71de659 100644 --- a/dump/tape.c +++ b/dump/tape.c @@ -41,7 +41,7 @@ #ifndef lint static const char rcsid[] = - "$Id: tape.c,v 1.54 2001/08/16 15:24:21 stelian Exp $"; + "$Id: tape.c,v 1.58 2001/11/17 10:44:18 stelian Exp $"; #endif /* not lint */ #include @@ -68,10 +68,12 @@ int write(), read(); #endif #include #include -#include #include #include #ifdef __linux__ +#include +#undef atomic_read /* this get wrongly defined in kernel */ + /* headers and we don't want it */ #ifdef HAVE_EXT2FS_EXT2_FS_H #include #else @@ -562,7 +564,7 @@ close_rewind(void) void rollforward(void) { - register struct req *p, *q, *prev; + register struct req *p, *q = NULL, *prev; register struct slave *tslp; int i, size, savedtapea, got; union u_spcl *ntb, *otb; @@ -1038,6 +1040,12 @@ doslave(int cmd, int slave_number, int first) union u_spcl *uspclptr; struct s_spcl *spclptr; #endif /* USE_QFA */ + sigset_t set; + + sigemptyset(&set); + sigaddset(&set, SIGUSR2); + sigprocmask(SIG_BLOCK, &set, NULL); + sigemptyset(&set); /* * Need our own seek pointer. @@ -1046,6 +1054,9 @@ doslave(int cmd, int slave_number, int first) if ((diskfd = OPEN(disk, O_RDONLY)) < 0) quit("slave couldn't reopen disk: %s\n", strerror(errno)); #ifdef __linux__ +#ifdef BLKFLSBUF + (void)ioctl(diskfd, BLKFLSBUF); +#endif ext2fs_close(fs); retval = dump_fs_open(disk, &fs); if (retval) @@ -1117,6 +1128,7 @@ doslave(int cmd, int slave_number, int first) if (compressed && do_compress) { comp_buf->length = bufsize; worklen = TP_BSIZE + writesize; + compresult = 1; #ifdef HAVE_ZLIB if (!bzipflag) { compresult = compress2(comp_buf->buf, @@ -1172,7 +1184,7 @@ doslave(int cmd, int slave_number, int first) if (sigsetjmp(jmpbuf, 1) == 0) { ready = 1; if (!caught) - (void) pause(); + sigsuspend(&set); } ready = 0; caught = 0;