Fix posix_fadvise on powerpc32

Andreas Jaeger aj@suse.de
Mon Aug 25 18:43:00 GMT 2003


Ulrich Drepper <drepper@redhat.com> writes:

> Andreas Jaeger wrote:
>
>> ============================================================
>> Index: sysdeps/unix/sysv/linux/posix_fadvise64.c
>> --- sysdeps/unix/sysv/linux/posix_fadvise64.c	17 Aug 2003 00:36:42 -0000	1.1
>> +++ sysdeps/unix/sysv/linux/posix_fadvise64.c	25 Aug 2003 08:19:40 -0000
>> @@ -33,8 +33,8 @@ __posix_fadvise64_l64 (int fd, off64_t o
>>  #ifdef __NR_fadvise64_64
>>    INTERNAL_SYSCALL_DECL (err);
>>    int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd,
>> -			      __LONG_LONG_PAIR (offset >> 32, offset),
>> -			      __LONG_LONG_PAIR (len >> 32, len),
>> +			      __LONG_LONG_PAIR ((long)offset >> 32, (long)offset),
>> +			      __LONG_LONG_PAIR ((long)len >> 32, (long)len),
>>  			      advise);
>>    if (!INTERNAL_SYSCALL_ERROR_P (ret, err))
>>      return 0;
>> @@ -50,7 +50,7 @@ __posix_fadvise64_l64 (int fd, off64_t o
>>  
>>    INTERNAL_SYSCALL_DECL (err2);
>>    int ret2 = INTERNAL_SYSCALL (fadvise64, err2, 5, fd,
>> -			       __LONG_LONG_PAIR (offset >> 32, offset),
>> +			       __LONG_LONG_PAIR ((long)offset >> 32, (long)offset),
>
> This code isn't correct either.  The cast has a higher precedence than
> the shift.  You'll always get zeor as the result.

Argh.  Thanks for noticing.  So, would (long)(offset >> 32) be ok?

Andreas
-- 
 Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
  SuSE Linux AG, Deutschherrnstr. 15-19, 90429 Nürnberg, Germany
   GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-hacker/attachments/20030825/b1671f57/attachment.sig>


More information about the Libc-hacker mailing list