#include <afs/usd.h>
#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;
* in succession (2 or 4 of them ).
*/
-
struct fileMark { /* in network byte order */
afs_int32 magic;
afs_uint32 nBytes;
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);
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 */
if (isafile)
{
p = (struct progress *)info->tmRock;
- posit = (position * BUTM_BLOCKSIZE);
-
- hset64(startOff, 0, posit);
+ 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);
+
w = USD_SEEK(p->fid, startOff, SEEK_SET, &stopOff);
if (w) info->error == w;
if (hcmp(startOff, stopOff) != 0) ERROR_EXIT(BUTM_POSITION);