X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=dump%2Ftape.c;h=cf1f5fbc4c6287eb02693aca60382d06d7acbddd;hb=9ce019288739ce7b6d3e3a4664303a5200b539ad;hp=8c62acb487131841c6ac2db4bdfc01fa627efed5;hpb=35b24fb7fabcf6df3b37aebf70c228d5b0688d32;p=dump.git diff --git a/dump/tape.c b/dump/tape.c index 8c62acb..cf1f5fb 100644 --- a/dump/tape.c +++ b/dump/tape.c @@ -41,7 +41,7 @@ #ifndef lint static const char rcsid[] = - "$Id: tape.c,v 1.41 2001/04/10 12:46:53 stelian Exp $"; + "$Id: tape.c,v 1.44 2001/04/24 10:59:12 stelian Exp $"; #endif /* not lint */ #include @@ -994,6 +994,8 @@ enslave(void) doslave(cmd[0], i); Exit(X_FINOK); } + else + close(cmd[0]); } #ifdef LINUX_FORK_BUG @@ -1054,7 +1056,7 @@ doslave(int cmd, int slave_number) long curtapepos; union u_spcl *uspclptr; struct s_spcl *spclptr; -#endif /* USA_QFA */ +#endif /* USE_QFA */ /* * Need our own seek pointer. @@ -1106,29 +1108,6 @@ doslave(int cmd, int slave_number) } } -#ifdef USE_QFA - if (gTapeposfd >= 0) { - uspclptr = (union u_spcl *)&slp->tblock[0]; - spclptr = &uspclptr->s_spcl; - if ((spclptr->c_magic == NFS_MAGIC) && - (spclptr->c_type == TS_INODE)) { - /* if an error occured previously don't - * try again */ - if (gtperr == 0) { - if ((gtperr = GetTapePos(&curtapepos)) == 0) { -#ifdef DEBUG_QFA - msg("inode %ld at tapepos %ld\n", spclptr->c_inumber, curtapepos); -#endif - sprintf(gTps, "%ld\t%d\t%ld\n", (unsigned long)spclptr->c_inumber, tapeno, curtapepos); - if (write(gTapeposfd, gTps, strlen(gTps)) != strlen(gTps)) { - quit("error writing tapepos file.\n"); - } - } - } - } - } -#endif /* USE_QFA */ - /* Try to write the data... */ wrote = 0; eot_count = 0; @@ -1152,6 +1131,7 @@ doslave(int cmd, int slave_number) if (compressed) { comp_buf->length = bufsize; worklen = TP_BSIZE + writesize; + compresult = Z_DATA_ERROR; if (do_compress) compresult = compress2(comp_buf->buf, &worklen, (char *)slp->tblock[0], writesize, compressed); @@ -1184,6 +1164,29 @@ doslave(int cmd, int slave_number) ready = 0; caught = 0; +#ifdef USE_QFA + if (gTapeposfd >= 0) { + uspclptr = (union u_spcl *)&slp->tblock[0]; + spclptr = &uspclptr->s_spcl; + if ((spclptr->c_magic == NFS_MAGIC) && + (spclptr->c_type == TS_INODE)) { + /* if an error occured previously don't + * try again */ + if (gtperr == 0) { + if ((gtperr = GetTapePos(&curtapepos)) == 0) { +#ifdef DEBUG_QFA + msg("inode %ld at tapepos %ld\n", spclptr->c_inumber, curtapepos); +#endif + sprintf(gTps, "%ld\t%d\t%ld\n", (unsigned long)spclptr->c_inumber, tapeno, curtapepos); + if (write(gTapeposfd, gTps, strlen(gTps)) != strlen(gTps)) { + warn("error writing tapepos file.\n"); + } + } + } + } + } +#endif /* USE_QFA */ + while (eot_count < 10 && size < bufsize) { #ifdef RDUMP if (host)