From f7c4f16110497457263851fed22a0c2ed50521c0 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Tue, 29 Jul 2003 23:34:33 +0000 Subject: [PATCH 1/1] butm-restore-from-large-files-20030729 make restore also work from large files --- src/butm/file_tm.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/butm/file_tm.c b/src/butm/file_tm.c index 79f4f49..ac4d47f 100644 --- a/src/butm/file_tm.c +++ b/src/butm/file_tm.c @@ -31,6 +31,15 @@ RCSID #include #include "error_macros.h" +#ifdef O_LARGEFILE +typedef off64_t osi_lloff_t; +#else /* O_LARGEFILE */ +#ifdef AFS_HAVE_LLSEEK +typedef offset_t osi_lloff_t; +#else /* AFS_HAVE_LLSEEK */ +typedef off_t osi_lloff_t; +#endif /* AFS_HAVE_LLSEEK */ +#endif /* O_LARGEFILE */ extern int isafile; @@ -652,7 +661,7 @@ incPosition(info, fid, dataSize) if (info->posCount >= 2147467264) { /* 2GB - 16K */ info->posCount = 0; -#if (defined(AFS_SUN_ENV) || defined(AFS_DEC_ENV)) +#if (defined(AFS_SUN_ENV) || defined(AFS_DEC_ENV) || defined(AFS_LINUX24_ENV)) if (!isafile) { hset64(off, 0, 0); USD_IOCTL(fid, USD_IOCTL_SETSIZE, &off); @@ -1596,7 +1605,9 @@ file_Seek(info, position) afs_int32 position; { afs_int32 code = 0; - afs_int32 posit, w; + afs_int32 w; + osi_lloff_t posit; + afs_uint32 c, d; struct progress *p; afs_hyper_t startOff, stopOff; /* for normal file(non-tape) seeks */ @@ -1611,9 +1622,18 @@ file_Seek(info, position) if (isafile) { p = (struct progress *)info->tmRock; - posit = (position * BUTM_BLOCKSIZE); + posit = (osi_lloff_t)position * (osi_lloff_t)BUTM_BLOCKSIZE; + + /* Not really necessary to do it this way, should be fixed */ +#ifdef O_LARGEFILE + c = (posit >> 32); + d = (posit & 0xffffffff); +#else + c = 0; + d = posit; +#endif + hset64(startOff, c, d); - hset64(startOff, 0, posit); w = USD_SEEK(p->fid, startOff, SEEK_SET, &stopOff); if (w) info->error == w; -- 1.9.4