--- Linux-AIO/AIO.xs 2002/04/02 14:01:09 1.14 +++ Linux-AIO/AIO.xs 2002/05/18 21:48:36 1.15 @@ -205,6 +205,7 @@ aio_req req; int errno; + /* this is very much x86 and kernel-specific :(:(:( */ /* we rely on gcc's ability to create closures. */ _syscall3(int,read,int,fd,char *,buf,size_t,count) _syscall3(int,write,int,fd,char *,buf,size_t,count) @@ -212,8 +213,8 @@ _syscall3(int,open,char *,pathname,int,flags,mode_t,mode) _syscall1(int,close,int,fd) - _syscall4(int,pread,int,fd,char *,buf,size_t,count,off_t,offset) - _syscall4(int,pwrite,int,fd,char *,buf,size_t,count,off_t,offset) + _syscall5(int,pread,int,fd,char *,buf,size_t,count,unsigned int,offset_lo,unsigned int,offset_hi) + _syscall5(int,pwrite,int,fd,char *,buf,size_t,count,unsigned int,offset_lo,unsigned int,offset_hi) _syscall2(int,stat64, const char *, filename, struct stat64 *, buf) _syscall2(int,lstat64, const char *, filename, struct stat64 *, buf) @@ -228,9 +229,9 @@ errno = 0; /* strictly unnecessary */ if (req->type == REQ_READ) - req->result = pread (req->fd, req->dataptr, req->length, req->offset); + req->result = pread (req->fd, req->dataptr, req->length, req->offset & 0xffffffff, req->offset >> 32); else if (req->type == REQ_WRITE) - req->result = pwrite (req->fd, req->dataptr, req->length, req->offset); + req->result = pwrite(req->fd, req->dataptr, req->length, req->offset & 0xffffffff, req->offset >> 32); else if (req->type == REQ_OPEN) req->result = open (req->dataptr, req->fd, req->mode); else if (req->type == REQ_CLOSE)