From f2c7b3709620eb2b36e956f77ffa5e10a50f285c Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 30 Apr 2007 21:23:22 +0000 Subject: Carmelo AMOROSO writes: running LTP test suite on uClibc-nptl for sh4 I found a bug into pread and pwrite functions. When the offset is negative it is not correctly handled due to a missing shift operation, so it is passed to the syscall as the highest unsigned positive value. --- libc/sysdeps/linux/sh/pread_write.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libc') diff --git a/libc/sysdeps/linux/sh/pread_write.c b/libc/sysdeps/linux/sh/pread_write.c index 415572ef7..e91582f2e 100644 --- a/libc/sysdeps/linux/sh/pread_write.c +++ b/libc/sysdeps/linux/sh/pread_write.c @@ -33,7 +33,7 @@ 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,0,__LONG_LONG_PAIR(offset >> 31,offset))); } weak_alias(__libc_pread,pread) @@ -66,7 +66,7 @@ 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,0,__LONG_LONG_PAIR(offset >> 31,offset))); } weak_alias(__libc_pwrite,pwrite) -- cgit v1.2.3