X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=restore%2Ftape.c;h=7debfd16a054bae6ac243c8f1914e0279cde2505;hp=395c99e9a81fb7a806a2acdca977653277c0146a;hb=c910e1c0e24b3f10483e624adb6b9c2a004e39dc;hpb=f0ab1ab5331f9ed387ade32d96b24285b0cd5282 diff --git a/restore/tape.c b/restore/tape.c index 395c99e..7debfd1 100644 --- a/restore/tape.c +++ b/restore/tape.c @@ -42,7 +42,7 @@ #ifndef lint static const char rcsid[] = - "$Id: tape.c,v 1.98 2010/06/11 09:57:31 stelian Exp $"; + "$Id: tape.c,v 1.102 2011/06/08 15:40:53 stelian Exp $"; #endif /* not lint */ #include @@ -522,7 +522,8 @@ again: do { fprintf(stderr, "Specify next volume # (none if no more volumes): "); (void) fflush(stderr); - (void) fgets(buf, TP_BSIZE, terminal); + if (!fgets(buf, TP_BSIZE, terminal)) + break; } while (!feof(terminal) && buf[0] == '\n'); if (feof(terminal)) exit(1); @@ -585,7 +586,8 @@ again: fprintf(stderr, "otherwise enter tape name (default: %s) ", magtape); #endif (void) fflush(stderr); - (void) fgets(buf, TP_BSIZE, terminal); + if (!fgets(buf, TP_BSIZE, terminal)) + exit(1); if (feof(terminal)) exit(1); if (!strcmp(buf, "none\n")) { @@ -872,8 +874,10 @@ extractfile(struct entry *ep, int doremove) } close(sk); } - (void) chown(name, luid, lgid); - (void) chmod(name, mode); + if (chown(name, luid, lgid) < 0) + warn("%s: chown", name); + if (chmod(name, mode) < 0) + warn("%s: chmod", name); extractattr(name); utimes(name, timep); if (flags) @@ -929,7 +933,8 @@ extractfile(struct entry *ep, int doremove) skipfile(); #ifdef HAVE_LCHOWN - (void) lchown(name, luid, lgid); + if (lchown(name, luid, lgid) < 0) + warn("%s: lchown", name); #endif extractattr(name); return (GOOD); @@ -952,8 +957,10 @@ extractfile(struct entry *ep, int doremove) return (FAIL); } } - (void) chown(name, luid, lgid); - (void) chmod(name, mode); + if (chown(name, luid, lgid) < 0) + warn("%s: chown", name); + if (chmod(name, mode) < 0) + warn("%s: chmod", name); extractattr(name); utimes(name, timep); if (flags) @@ -990,8 +997,10 @@ extractfile(struct entry *ep, int doremove) return (FAIL); } } - (void) chown(name, luid, lgid); - (void) chmod(name, mode); + if (chown(name, luid, lgid) < 0) + warn("%s: chown", name); + if (chmod(name, mode) < 0) + warn("%s: chmod", name); extractattr(name); utimes(name, timep); if (flags) @@ -1039,8 +1048,10 @@ extractfile(struct entry *ep, int doremove) } else skipfile(); - (void) chown(name, luid, lgid); - (void) chmod(name, mode); + if (chown(name, luid, lgid) < 0) + warn("%s: chown", name); + if (chmod(name, mode) < 0) + warn("%s: chmod", name); extractattr(name); utimes(name, timep); if (flags) @@ -1260,8 +1271,10 @@ extractresourceufs(char *name) /* and add the resource data from tape */ getfile(xtrfile, xtrskip); - (void) fchown(ofile, uid, gid); - (void) fchmod(ofile, mode); + if (fchown(ofile, uid, gid) < 0) + warn("%s: fchown", name); + if (fchmod(ofile, mode) < 0) + warn("%s: fchmod", name); (void) close(ofile); utimes(oFileRsrc, timep); (void) lsetflags(oFileRsrc, flags); @@ -1413,7 +1426,8 @@ loop: last_write_was_hole = 1; } if (last_write_was_hole) { - FTRUNCATE(ofile, origsize); + if (FTRUNCATE(ofile, origsize) < 0) + warn("%s: ftruncate", curfile.name); } if (!readingmaps) findinode(&spcl); @@ -2129,6 +2143,10 @@ readtape_comprfile(char *buf) ((struct s_spcl *)&tapebuf[i * TP_BSIZE])->c_magic = 0; numtrec = ntrec; tpb = (struct tapebuf *) tapebuf; +#ifdef USE_QFA + if (createtapeposflag) + (void)GetTapePos(&curtapepos); +#endif /* read the block prefix */ ret = read_a_block(mt, tapebuf, PREFIXSIZE, &rl); @@ -2218,6 +2236,10 @@ readtape_comprtape(char *buf) ((struct s_spcl *)&tapebuf[i * TP_BSIZE])->c_magic = 0; numtrec = ntrec; tpb = (struct tapebuf *) tapebuf; +#ifdef USE_QFA + if (createtapeposflag) + (void)GetTapePos(&curtapepos); +#endif /* read the block */ size = bufsize + PREFIXSIZE; @@ -2407,8 +2429,8 @@ decompress_tapebuf(struct tapebuf *tpbin, int readsize) } if (reason) { if (lengtherr) - fprintf(stderr, "%s compressed block: %d expected: %u\n", - lengtherr, readsize, tpbin->length + PREFIXSIZE); + fprintf(stderr, "%s compressed block: %d expected: %lu\n", + lengtherr, readsize, (unsigned long)tpbin->length + PREFIXSIZE); fprintf(stderr, "decompression error, block %ld: %s\n", tpblksread+1, reason); if (!cresult) @@ -3322,11 +3344,14 @@ ReReadInodeFromTape(dump_ino_t theino) cntloop++; gethead(&spcl); } while (!(spcl.c_inumber == theino && spcl.c_type == TS_INODE && spcl.c_date == dumpdate)); + + tpblksread = spcl.c_tapea + spcl.c_volume; #ifdef DEBUG_QFA fprintf(stderr, "DEBUG: %ld reads\n", cntloop); fprintf(stderr, "DEBUG: bufsize %ld\n", bufsize); fprintf(stderr, "DEBUG: ntrec %ld\n", ntrec); - fprintf(stderr, "DEBUG: %ld reads\n", cntloop); + fprintf(stderr, "DEBUG: tapea %d\n", spcl.c_tapea); + fprintf(stderr, "DEBUG: tpblksread %ld\n", tpblksread); #endif findinode(&spcl); noresyncmesg = 0;