From patchwork Wed Jun 5 14:53:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 1110525 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-102463-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="d/bXdZRv"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45JsHV4xS5z9s3l for ; Thu, 6 Jun 2019 00:53:42 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id:mime-version :content-type; q=dns; s=default; b=AtZxF6NKOlVDKLwwY6dZdZ0dwOyF3 vsxygV+2uIWfv9m1NuLz/MAUZfcm/3Sj2hWed2z4BzY5i2EeZ+26rs/dc2DZei5G tudvyNhR0lMxxe+VQyUXt2CCltXCl0U1q901ZFVrFR2MDsV7aDzBeQE2lJIs1PEv UD9hlSXVsgjtbg= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id:mime-version :content-type; s=default; bh=ha2Qtr3A1p5VlZOyIqpCDLQlttk=; b=d/b XdZRvzOV3NSJfqf84BT9oorizSrdVlOjcqlrj8AY5IR1GlUH5thvxo6okYoS5nUR 2SXLc7xGLrmjsDc6/jIirhKz8ZZTPPFG6irFG8fx9PX5hLNJrcMMyKb1J3Mi3PfH SB+PZ4+/e2DwN7BUhPfkukfStH0lvJIObbpRrGi0= Received: (qmail 17108 invoked by alias); 5 Jun 2019 14:53:36 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 16685 invoked by uid 89); 5 Jun 2019 14:53:35 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-19.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_HELO_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mx1.redhat.com From: Florian Weimer To: libc-alpha@sourceware.org Subject: [PATCH] : Use Linux kernel UAPI header if available and useful Date: Wed, 05 Jun 2019 16:53:30 +0200 Message-ID: <87zhmwt76d.fsf@oldenburg2.str.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) MIME-Version: 1.0 This will automatically import new STATX_* constants. It also avoids a conflict between and . The 256 constant in the new static assert has been validated using build-many-glibcs.py on all supported architectures. 2019-06-05 Florian Weimer * io/bits/statx.h: Fix typo in error message. Include is available. Define statx-related constants only if STATX_ALL is not defined by (or the header is missing altogether). * sysdeps/unix/sysv/linux/statx.c: Add static assert for the size of struct statx. Reviewed-by: Carlos O'Donell diff --git a/io/bits/statx.h b/io/bits/statx.h index cff14b2543..d0dcc353ba 100644 --- a/io/bits/statx.h +++ b/io/bits/statx.h @@ -19,9 +19,14 @@ /* This interface is based on in Linux. */ #ifndef _SYS_STAT_H -# error Never include directly, include instead. +# error Never include directly, include instead. #endif +#if __glibc_has_include () +# include +#endif + +#ifndef STATX_ALL struct statx_timestamp { __int64_t tv_sec; @@ -58,28 +63,29 @@ struct statx __uint64_t __statx_pad2[14]; }; -#define STATX_TYPE 0x0001U -#define STATX_MODE 0x0002U -#define STATX_NLINK 0x0004U -#define STATX_UID 0x0008U -#define STATX_GID 0x0010U -#define STATX_ATIME 0x0020U -#define STATX_MTIME 0x0040U -#define STATX_CTIME 0x0080U -#define STATX_INO 0x0100U -#define STATX_SIZE 0x0200U -#define STATX_BLOCKS 0x0400U -#define STATX_BASIC_STATS 0x07ffU -#define STATX_ALL 0x0fffU -#define STATX_BTIME 0x0800U -#define STATX__RESERVED 0x80000000U +# define STATX_TYPE 0x0001U +# define STATX_MODE 0x0002U +# define STATX_NLINK 0x0004U +# define STATX_UID 0x0008U +# define STATX_GID 0x0010U +# define STATX_ATIME 0x0020U +# define STATX_MTIME 0x0040U +# define STATX_CTIME 0x0080U +# define STATX_INO 0x0100U +# define STATX_SIZE 0x0200U +# define STATX_BLOCKS 0x0400U +# define STATX_BASIC_STATS 0x07ffU +# define STATX_ALL 0x0fffU +# define STATX_BTIME 0x0800U +# define STATX__RESERVED 0x80000000U -#define STATX_ATTR_COMPRESSED 0x0004 -#define STATX_ATTR_IMMUTABLE 0x0010 -#define STATX_ATTR_APPEND 0x0020 -#define STATX_ATTR_NODUMP 0x0040 -#define STATX_ATTR_ENCRYPTED 0x0800 -#define STATX_ATTR_AUTOMOUNT 0x1000 +# define STATX_ATTR_COMPRESSED 0x0004 +# define STATX_ATTR_IMMUTABLE 0x0010 +# define STATX_ATTR_APPEND 0x0020 +# define STATX_ATTR_NODUMP 0x0040 +# define STATX_ATTR_ENCRYPTED 0x0800 +# define STATX_ATTR_AUTOMOUNT 0x1000 +#endif /* !STATX_ALL */ __BEGIN_DECLS diff --git a/sysdeps/unix/sysv/linux/statx.c b/sysdeps/unix/sysv/linux/statx.c index b99e30dc3e..5d634960a6 100644 --- a/sysdeps/unix/sysv/linux/statx.c +++ b/sysdeps/unix/sysv/linux/statx.c @@ -21,6 +21,11 @@ #include "statx_generic.c" +/* Ensure that the kernel headers have not changed the struct size. + If this ever happens, it may be necessary to introduce a new symbol + version. */ +_Static_assert (sizeof (struct statx) == 256, "struct statx size changed"); + int statx (int fd, const char *path, int flags, unsigned int mask, struct statx *buf)