X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=dump%2Ftraverse.c;h=80d7e86bf17e18441bb28cf38ac708f59d5d516b;hp=975f6f82e3bf8957c28dd937a68a68ce05ffd905;hb=e51470bfc05d83f82c37d24504220c7163bbd4c1;hpb=1df5c692513d8067e0892398e1301b7eb8bba2a1 diff --git a/dump/traverse.c b/dump/traverse.c index 975f6f8..80d7e86 100644 --- a/dump/traverse.c +++ b/dump/traverse.c @@ -2,8 +2,8 @@ * Ported to Linux's Second Extended File System as part of the * dump and restore backup suit * Remy Card , 1994-1997 - * Stelian Pop , 1999-2000 - * Stelian Pop - Alcôve , 2000 + * Stelian Pop , 1999-2000 + * Stelian Pop - Alcôve , 2000-2002 */ /*- @@ -41,7 +41,7 @@ #ifndef lint static const char rcsid[] = - "$Id: traverse.c,v 1.38 2001/08/17 09:55:09 stelian Exp $"; + "$Id: traverse.c,v 1.41 2002/01/25 14:59:53 stelian Exp $"; #endif /* not lint */ #include @@ -1176,21 +1176,20 @@ dumpmap(char *map, int type, dump_ino_t ino) writerec(cp, 0); } -/* - * Write a header record to the dump tape. - */ #if defined __linux__ && !defined(int32_t) #define int32_t __s32 #endif + +/* + * Compute and fill in checksum information. + */ void -writeheader(dump_ino_t ino) +mkchecksum(union u_spcl *tmpspcl) { - register int32_t sum, cnt, *lp; + int32_t sum, cnt, *lp; - spcl.c_inumber = ino; - spcl.c_magic = NFS_MAGIC; - spcl.c_checksum = 0; - lp = (int32_t *)&spcl; + tmpspcl->s_spcl.c_checksum = 0; + lp = (int32_t *)&tmpspcl->s_spcl; sum = 0; cnt = sizeof(union u_spcl) / (4 * sizeof(int32_t)); while (--cnt >= 0) { @@ -1199,7 +1198,18 @@ writeheader(dump_ino_t ino) sum += *lp++; sum += *lp++; } - spcl.c_checksum = CHECKSUM - sum; + tmpspcl->s_spcl.c_checksum = CHECKSUM - sum; +} + +/* + * Write a header record to the dump tape. + */ +void +writeheader(dump_ino_t ino) +{ + spcl.c_inumber = ino; + spcl.c_magic = NFS_MAGIC; + mkchecksum((union u_spcl *)&spcl); writerec((char *)&spcl, 1); } @@ -1239,11 +1249,10 @@ getino(dump_ino_t inum) /* * Read a chunk of data from the disk. * Try to recover from hard errors by reading in sector sized pieces. - * Error recovery is attempted at most BREADEMAX times before seeking + * Error recovery is attempted at most breademax times before seeking * consent from the operator to continue. */ int breaderrors = 0; -#define BREADEMAX 32 void bread(daddr_t blkno, char *buf, int size) @@ -1282,9 +1291,9 @@ loop: else msg("short read error from %s: [block %d]: count=%d, got=%d\n", disk, blkno, size, cnt); - if (++breaderrors > BREADEMAX) { + if (++breaderrors > breademax) { msg("More than %d block read errors from %d\n", - BREADEMAX, disk); + breademax, disk); broadcast("DUMP IS AILING!\n"); msg("This is an unrecoverable error.\n"); if (!query("Do you want to attempt to continue?")){