[PATCH 2/6] Use INLINE_SYSCALL_ERROR_RETURN

Florian Weimer fweimer@redhat.com
Tue Oct 13 13:51:00 GMT 2015


On 10/13/2015 03:49 PM, Andreas Schwab wrote:
> "H.J. Lu" <hjl.tools@gmail.com> writes:
> 
>> diff --git a/sysdeps/unix/sysv/linux/mmap64.c b/sysdeps/unix/sysv/linux/mmap64.c
>> index 1c9d3c1..8d5b0a4 100644
>> --- a/sysdeps/unix/sysv/linux/mmap64.c
>> +++ b/sysdeps/unix/sysv/linux/mmap64.c
>> @@ -46,7 +46,7 @@ __mmap64 (void *addr, size_t len, int prot, int
>> flags, int fd, off64_t offset)
>>      }
>>  #endif
>>    if (offset & ((1 << page_shift) - 1))
>> -    return (void *) INLINE_SYSCALL_ERROR_RETURN (EINVAL);
>> +    return (void *) (ptrdiff_t) INLINE_SYSCALL_ERROR_RETURN (EINVAL);
> 
> That's doesn't look like a good change, since you lose the warning if
> INLINE_SYSCALL_ERROR_RETURN returns something different from the size of
> a pointer.

INLINE_SYSCALL_ERROR_RETURN (EINVAL) is of type int, so we definitely do
not want a warning here.

The problem here is that the cast is implementation-defined, and I think
we want sign extension here (although the manual pages are unclear about
this).

Florian



More information about the Libc-alpha mailing list