This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: misc/sys/xattr.h: guard against linux uapi header inclusion
- From: Allan McRae <allan at archlinux dot org>
- To: OndÅej BÃlka <neleai at seznam dot cz>, Serge Hallyn <serge dot hallyn at ubuntu dot com>
- Cc: libc-alpha at sourceware dot org, "Andrew G. Morgan" <morgan at kernel dot org>
- Date: Fri, 21 Mar 2014 09:46:03 +1000
- Subject: Re: misc/sys/xattr.h: guard against linux uapi header inclusion
- Authentication-results: sourceware.org; auth=none
- References: <20140311041707 dot GA6064 at sergelap> <20140318132710 dot GA9737 at domone dot podge>
On 18/03/14 23:27, OndÅej BÃlka wrote:
> On Mon, Mar 10, 2014 at 11:17:07PM -0500, Serge Hallyn wrote:
>> If the glibc xattr.h header is included after the uapi header,
>> compilation fails due to an enum re-using a #define from the
>> uapi header. Protect against this by guarding the define and
>> enum inclusions against each other.
>>
>> (A corresponding kernel patch has been sent here:
>> http://lkml.org/lkml/2014/3/7/331 )
>>
>> (See https://lists.debian.org/debian-glibc/2014/03/msg00029.html
>> and https://sourceware.org/glibc/wiki/Synchronizing_Headers
>> for more information.)
>>
>> Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
>>
> Looks ok, I commited that with appropriate ChangeLog.
>
Has the kernel patch been reviewed? This should not have been committed
before there was agreement between both parties that the patches were good.
The kernel patch in the link looks wrong to me. The define
__UAPI_DEF_XATTR is set to 0 whenever any glibc header is included, not
just sys/xattr.h. It should be wrapped in "#ifdef _SYS_XATTR_H".
The glibc patch is fine, but pointless until is the kernel patch is
accepted.
>> ---
>> misc/sys/xattr.h | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/misc/sys/xattr.h b/misc/sys/xattr.h
>> index 929cd87..796df90 100644
>> --- a/misc/sys/xattr.h
>> +++ b/misc/sys/xattr.h
>> @@ -26,6 +26,7 @@ __BEGIN_DECLS
>>
>> /* The following constants should be used for the fifth parameter of
>> `*setxattr'. */
>> +#ifndef __USE_KERNEL_XATTR_DEFS
>> enum
>> {
>> XATTR_CREATE = 1, /* set value, fail if attr already exists. */
>> @@ -33,6 +34,7 @@ enum
>> XATTR_REPLACE = 2 /* set value, fail if attr does not exist. */
>> #define XATTR_REPLACE XATTR_REPLACE
>> };
>> +#endif
>>
>> /* Set the attribute NAME of the file pointed to by PATH to VALUE (which
>> is SIZE bytes long). Return 0 on success, -1 for errors. */
>
>
>