diff options
author | Henning Brauer <henning@cvs.openbsd.org> | 2004-04-13 21:51:19 +0000 |
---|---|---|
committer | Henning Brauer <henning@cvs.openbsd.org> | 2004-04-13 21:51:19 +0000 |
commit | a8780e080309fc91a1dbcd87f8263df4cc68efd1 (patch) | |
tree | 15bf305fae70c0220e447a0f37cd1830b870884d | |
parent | 1d54d563165f38692bbea30882290ed58a25e63c (diff) |
fix restore so that it can actually restore files larger than 4GB by
changing the type of "size" to off_t in getfiles() plus little dependent
type cleanup, from Daniel Lucq <daniel@lucq.org>
ok tdeval@ millert@ otto@
-rw-r--r-- | sbin/restore/dirs.c | 19 | ||||
-rw-r--r-- | sbin/restore/extern.h | 6 | ||||
-rw-r--r-- | sbin/restore/tape.c | 58 |
3 files changed, 42 insertions, 41 deletions
diff --git a/sbin/restore/dirs.c b/sbin/restore/dirs.c index 533e9cbee8c..50f44fe1bc2 100644 --- a/sbin/restore/dirs.c +++ b/sbin/restore/dirs.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dirs.c,v 1.26 2003/08/25 23:28:16 tedu Exp $ */ +/* $OpenBSD: dirs.c,v 1.27 2004/04/13 21:51:18 henning Exp $ */ /* $NetBSD: dirs.c,v 1.26 1997/07/01 05:37:49 lukem Exp $ */ /* @@ -39,7 +39,7 @@ #if 0 static char sccsid[] = "@(#)dirs.c 8.5 (Berkeley) 8/31/94"; #else -static const char rcsid[] = "$OpenBSD: dirs.c,v 1.26 2003/08/25 23:28:16 tedu Exp $"; +static const char rcsid[] = "$OpenBSD: dirs.c,v 1.27 2004/04/13 21:51:18 henning Exp $"; #endif #endif /* not lint */ @@ -126,7 +126,7 @@ static void dcvt(struct odirect *, struct direct *); static void flushent(void); static struct inotab *inotablookup(ino_t); static RST_DIR *opendirfile(const char *); -static void putdir(char *, long); +static void putdir(char *, size_t); static void putent(struct direct *); static void rst_seekdir(RST_DIR *, long, long); static long rst_telldir(RST_DIR *); @@ -341,13 +341,13 @@ searchdir(inum, name) static void putdir(buf, size) char *buf; - long size; + size_t size; { struct direct cvtbuf; struct odirect *odp; struct odirect *eodp; struct direct *dp; - long loc, i; + size_t loc, i; if (cvtflag) { eodp = (struct odirect *)&buf[size]; @@ -382,12 +382,13 @@ putdir(buf, size) "reclen not multiple of 4 "); if (dp->d_reclen < DIRSIZ(0, dp)) Vprintf(stdout, - "reclen less than DIRSIZ (%d < %d) ", - dp->d_reclen, DIRSIZ(0, dp)); + "reclen less than DIRSIZ (%u < %u) ", + (unsigned)dp->d_reclen, + (unsigned)DIRSIZ(0, dp)); if (dp->d_namlen > NAME_MAX) Vprintf(stdout, - "reclen name too big (%d > %d) ", - dp->d_namlen, NAME_MAX); + "reclen name too big (%u > %u) ", + (unsigned)dp->d_namlen, NAME_MAX); Vprintf(stdout, "\n"); loc += i; continue; diff --git a/sbin/restore/extern.h b/sbin/restore/extern.h index 731ddeb7334..181e67ac00c 100644 --- a/sbin/restore/extern.h +++ b/sbin/restore/extern.h @@ -1,4 +1,4 @@ -/* $OpenBSD: extern.h,v 1.7 2003/06/02 20:06:16 millert Exp $ */ +/* $OpenBSD: extern.h,v 1.8 2004/04/13 21:51:18 henning Exp $ */ /* $NetBSD: extern.h,v 1.4 1995/03/18 14:59:43 cgd Exp $ */ /*- @@ -56,7 +56,7 @@ void freeentry(struct entry *); void freename(char *); int genliteraldir(char *, ino_t); char *gentempname(struct entry *); -void getfile(void (*)(char *, long), void (*)(char *, long)); +void getfile(void (*)(char *, size_t), void (*)(char *, size_t)); void getvol(long); void initsymtable(char *); int inodetype(ino_t); @@ -98,7 +98,7 @@ void swabst(u_char *, u_char *); void treescan(char *, ino_t, long (*)(char *, ino_t, int)); ino_t upperbnd(ino_t); long verifyfile(char *, ino_t, int); -void xtrnull(char *, long); +void xtrnull(char *, size_t); /* From ../dump/dumprmt.c */ void rmtclose(void); diff --git a/sbin/restore/tape.c b/sbin/restore/tape.c index 6f23ccda8db..cc06ec02573 100644 --- a/sbin/restore/tape.c +++ b/sbin/restore/tape.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tape.c,v 1.27 2003/07/29 18:38:36 deraadt Exp $ */ +/* $OpenBSD: tape.c,v 1.28 2004/04/13 21:51:18 henning Exp $ */ /* $NetBSD: tape.c,v 1.26 1997/04/15 07:12:25 lukem Exp $ */ /* @@ -39,7 +39,7 @@ #if 0 static char sccsid[] = "@(#)tape.c 8.6 (Berkeley) 9/13/94"; #else -static const char rcsid[] = "$OpenBSD: tape.c,v 1.27 2003/07/29 18:38:36 deraadt Exp $"; +static const char rcsid[] = "$OpenBSD: tape.c,v 1.28 2004/04/13 21:51:18 henning Exp $"; #endif #endif /* not lint */ @@ -81,7 +81,7 @@ static char *host = NULL; static int ofile; static char *map; static char lnkbuf[MAXPATHLEN + 1]; -static int pathlen; +static size_t pathlen; int oldinofmt; /* old inode format conversion required */ int Bcvt; /* Swap Bytes (for CCI or sun) */ @@ -100,12 +100,12 @@ static u_long swabl(u_long); static u_char *swablong(u_char *, int); static u_char *swabshort(u_char *, int); static void terminateinput(void); -static void xtrfile(char *, long); -static void xtrlnkfile(char *, long); -static void xtrlnkskip(char *, long); -static void xtrmap(char *, long); -static void xtrmapskip(char *, long); -static void xtrskip(char *, long); +static void xtrfile(char *, size_t); +static void xtrlnkfile(char *, size_t); +static void xtrlnkskip(char *, size_t); +static void xtrmap(char *, size_t); +static void xtrmapskip(char *, size_t); +static void xtrskip(char *, size_t); /* * Set up an input source @@ -639,12 +639,12 @@ skipfile() */ void getfile(fill, skip) - void (*fill)(char *, long); - void (*skip)(char *, long); + void (*fill)(char *, size_t); + void (*skip)(char *, size_t); { int i; volatile int curblk = 0; - volatile long size = spcl.c_dinode.di_size; + volatile off_t size = spcl.c_dinode.di_size; static char clearedbuf[MAXBSIZE]; char buf[MAXBSIZE / TP_BSIZE][TP_BSIZE]; char junk[TP_BSIZE]; @@ -663,19 +663,19 @@ loop: readtape(&buf[curblk++][0]); if (curblk == fssize / TP_BSIZE) { (*fill)((char *)buf, size > TP_BSIZE ? - (long) (fssize) : - (curblk - 1) * TP_BSIZE + size); + fssize : + ((off_t)curblk - 1) * TP_BSIZE + size); curblk = 0; } } else { if (curblk > 0) { (*fill)((char *)buf, size > TP_BSIZE ? - (long) (curblk * TP_BSIZE) : - (curblk - 1) * TP_BSIZE + size); + (curblk * TP_BSIZE) : + ((off_t)curblk - 1) * TP_BSIZE + size); curblk = 0; } (*skip)(clearedbuf, size > TP_BSIZE ? - (long) TP_BSIZE : size); + TP_BSIZE : size); } if ((size -= TP_BSIZE) <= 0) { for (i++; i < spcl.c_count; i++) @@ -692,7 +692,7 @@ loop: curfile.name, blksread); } if (curblk > 0) - (*fill)((char *)buf, (curblk * TP_BSIZE) + size); + (*fill)((char *)buf, ((off_t)curblk * TP_BSIZE) + size); findinode(&spcl); gettingfile = 0; } @@ -703,12 +703,12 @@ loop: static void xtrfile(buf, size) char *buf; - long size; + size_t size; { if (Nflag) return; - if (write(ofile, buf, (int) size) == -1) + if (write(ofile, buf, size) == -1) err(1, "write error extracting inode %d, name %s\nwrite", curfile.ino, curfile.name); } @@ -720,10 +720,10 @@ xtrfile(buf, size) static void xtrskip(buf, size) char *buf; - long size; + size_t size; { - if (lseek(ofile, size, SEEK_CUR) == -1) + if (lseek(ofile, (off_t)size, SEEK_CUR) == -1) err(1, "seek error extracting inode %d, name %s\nlseek", curfile.ino, curfile.name); } @@ -734,13 +734,13 @@ xtrskip(buf, size) static void xtrlnkfile(buf, size) char *buf; - long size; + size_t size; { pathlen += size; if (pathlen > MAXPATHLEN) - errx(1, "symbolic link name: %s->%s%s; too long %d", - curfile.name, lnkbuf, buf, pathlen); + errx(1, "symbolic link name: %s->%s%s; too long %lu", + curfile.name, lnkbuf, buf, (u_long)pathlen); (void)strlcat(lnkbuf, buf, sizeof(lnkbuf)); } @@ -751,7 +751,7 @@ xtrlnkfile(buf, size) static void xtrlnkskip(buf, size) char *buf; - long size; + size_t size; { errx(1, "unallocated block in symbolic link %s", curfile.name); @@ -763,7 +763,7 @@ xtrlnkskip(buf, size) static void xtrmap(buf, size) char *buf; - long size; + size_t size; { memcpy(map, buf, size); @@ -777,7 +777,7 @@ xtrmap(buf, size) static void xtrmapskip(buf, size) char *buf; - long size; + size_t size; { panic("hole in map\n"); @@ -791,7 +791,7 @@ xtrmapskip(buf, size) void xtrnull(buf, size) char *buf; - long size; + size_t size; { return; |