summaryrefslogtreecommitdiff
path: root/libc/sysdeps
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2007-04-30 21:23:22 +0000
committerMike Frysinger <vapier@gentoo.org>2007-04-30 21:23:22 +0000
commitf2c7b3709620eb2b36e956f77ffa5e10a50f285c (patch)
tree5e732b94fa1d3144de7a1b234a7d1c66b1f7919b /libc/sysdeps
parent086ca312f1450664bce2746085725fe144897d70 (diff)
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.
Diffstat (limited to 'libc/sysdeps')
-rw-r--r--libc/sysdeps/linux/sh/pread_write.c4
1 files changed, 2 insertions, 2 deletions
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)