diff options
| -rw-r--r-- | libc/sysdeps/linux/common/pread_write.c | 15 | ||||
| -rw-r--r-- | libc/sysdeps/linux/mips/pread_write.c | 15 | 
2 files changed, 18 insertions, 12 deletions
diff --git a/libc/sysdeps/linux/common/pread_write.c b/libc/sysdeps/linux/common/pread_write.c index 7955916fe..bf04be41f 100644 --- a/libc/sysdeps/linux/common/pread_write.c +++ b/libc/sysdeps/linux/common/pread_write.c @@ -38,6 +38,7 @@  #include <sys/types.h>  #include <sys/syscall.h>  #include <unistd.h> +#include <stdint.h>  #ifdef __NR_pread @@ -47,15 +48,16 @@ static inline _syscall5(ssize_t, __syscall_pread, int, fd, void *, buf,  ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)  {  -	return(__syscall_pread(fd,buf,count,__LONG_LONG_PAIR((off_t)0,offset))); +	return(__syscall_pread(fd,buf,count,__LONG_LONG_PAIR (offset >> 31, offset)));  }  weak_alias (__libc_pread, pread)  #if defined __UCLIBC_HAS_LFS__   ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)  {  -	return(__syscall_pread(fd, buf, count, -			__LONG_LONG_PAIR((off_t)(offset>>32),(off_t)(offset&0xffffffff)))); +    uint32_t low = offset & 0xffffffff; +    uint32_t high = offset >> 32; +	return(__syscall_pread(fd, buf, count, __LONG_LONG_PAIR (high, low)));  }  weak_alias (__libc_pread64, pread64)  #endif /* __UCLIBC_HAS_LFS__  */ @@ -71,15 +73,16 @@ static inline _syscall5(ssize_t, __syscall_pwrite, int, fd, const void *, buf,  ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)  {  -	return(__syscall_pwrite(fd,buf,count,__LONG_LONG_PAIR((off_t)0,offset))); +	return(__syscall_pwrite(fd,buf,count,__LONG_LONG_PAIR (offset >> 31, offset)));  }  weak_alias (__libc_pwrite, pwrite)  #if defined __UCLIBC_HAS_LFS__   ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)  {  -	return(__syscall_pwrite(fd, buf, count, -			__LONG_LONG_PAIR((off_t)(offset>>32),(off_t)(offset&0xffffffff)))); +    uint32_t low = offset & 0xffffffff; +    uint32_t high = offset >> 32; +	return(__syscall_pwrite(fd, buf, count, __LONG_LONG_PAIR (high, low)));  }  weak_alias (__libc_pwrite64, pwrite64)  #endif /* __UCLIBC_HAS_LFS__  */ diff --git a/libc/sysdeps/linux/mips/pread_write.c b/libc/sysdeps/linux/mips/pread_write.c index a182ebefe..92735aec2 100644 --- a/libc/sysdeps/linux/mips/pread_write.c +++ b/libc/sysdeps/linux/mips/pread_write.c @@ -38,6 +38,7 @@  #include <sys/types.h>  #include <sys/syscall.h>  #include <unistd.h> +#include <stdint.h>  #ifdef __NR_pread @@ -50,15 +51,16 @@ static inline _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf,  ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)  {  -	return(__syscall_pread(fd,buf,count,0,__LONG_LONG_PAIR((off_t)0,offset))); +	return(__syscall_pread(fd,buf,count,__LONG_LONG_PAIR (offset >> 31, offset)));  }  weak_alias (__libc_pread, pread)  #if defined __UCLIBC_HAS_LFS__   ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)  {  -	return(__syscall_pread(fd, buf, count, 0, -			__LONG_LONG_PAIR((off_t)(offset>>32),(off_t)(offset&0xffffffff)))); +    uint32_t low = offset & 0xffffffff; +    uint32_t high = offset >> 32; +	return(__syscall_pread(fd, buf, count, __LONG_LONG_PAIR (high, low)));  }  weak_alias (__libc_pread64, pread64)  #endif /* __UCLIBC_HAS_LFS__  */ @@ -78,15 +80,16 @@ static inline _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf,  ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)  {  -	return(__syscall_pwrite(fd,buf,count,0,__LONG_LONG_PAIR((off_t)0,offset))); +	return(__syscall_pwrite(fd,buf,count,__LONG_LONG_PAIR (offset >> 31, offset)));  }  weak_alias (__libc_pwrite, pwrite)  #if defined __UCLIBC_HAS_LFS__   ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)  {  -	return(__syscall_pwrite(fd, buf, count, 0, -			__LONG_LONG_PAIR((off_t)(offset>>32),(off_t)(offset&0xffffffff)))); +    uint32_t low = offset & 0xffffffff; +    uint32_t high = offset >> 32; +	return(__syscall_pwrite(fd, buf, count, __LONG_LONG_PAIR (high, low)));  }  weak_alias (__libc_pwrite64, pwrite64)  #endif /* __UCLIBC_HAS_LFS__  */  | 
