From owner-freebsd-standards@freebsd.org Mon Jan 25 09:04:30 2021 Return-Path: Delivered-To: freebsd-standards@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7A20F4EFD02 for ; Mon, 25 Jan 2021 09:04:30 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from anubis.delphij.net (anubis.delphij.net [IPv6:2001:470:1:117::25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "anubis.delphij.net", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DPP7d1g22z3LTL; Mon, 25 Jan 2021 09:04:28 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from odin.corp.delphij.net (unknown [IPv6:2601:646:8601:f4a:f47b:3e7c:223f:6703]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by anubis.delphij.net (Postfix) with ESMTPSA id 9A7142BC5B; Mon, 25 Jan 2021 01:04:26 -0800 (PST) Reply-To: d@delphij.net To: freebsd-standards@freebsd.org, Jilles Tjoelker , Ed Maste From: Xin Li Cc: Marshall Kirk McKusick Subject: _POSIX_C_SOURCE and S_IFMT macros Message-ID: <69977864-0a68-909d-8ecb-1d72c0ec0ef9@delphij.net> Date: Mon, 25 Jan 2021 01:04:25 -0800 User-Agent: Thunderbird MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="3HCik9fKRoooaqEco88ihSK1eM5qKyEZj" X-Rspamd-Queue-Id: 4DPP7d1g22z3LTL X-Spamd-Bar: ------ X-Spamd-Result: default: False [-6.08 / 15.00]; HAS_REPLYTO(0.00)[d@delphij.net]; RCVD_VIA_SMTP_AUTH(0.00)[]; XM_UA_NO_VERSION(0.01)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+a:sirius.delphij.net]; HAS_ATTACHMENT(0.00)[]; DKIM_TRACE(0.00)[delphij.net:+]; DMARC_POLICY_ALLOW(-0.50)[delphij.net,reject]; NEURAL_HAM_SHORT(-0.99)[-0.987]; SIGNED_PGP(-2.00)[]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:~]; RBL_DBL_DONT_QUERY_IPS(0.00)[2001:470:1:117::25:from]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US]; MID_RHS_MATCH_FROM(0.00)[]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; R_DKIM_ALLOW(-0.20)[delphij.net:s=m7e2]; FREEFALL_USER(0.00)[delphij]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; MIME_GOOD(-0.20)[multipart/signed,multipart/mixed,text/plain]; REPLYTO_DOM_EQ_FROM_DOM(0.00)[]; SPAMHAUS_ZRD(0.00)[2001:470:1:117::25:from:127.0.2.255]; RCVD_COUNT_TWO(0.00)[2]; RCVD_TLS_ALL(0.00)[]; MAILMAN_DEST(0.00)[freebsd-standards] X-BeenThere: freebsd-standards@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Standards compliance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Jan 2021 09:04:30 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --3HCik9fKRoooaqEco88ihSK1eM5qKyEZj Content-Type: multipart/mixed; boundary="91OnLhtfkkNYnIHeNGLSbk1DS1MEbU2W9"; protected-headers="v1" From: Xin Li Reply-To: d@delphij.net To: freebsd-standards@freebsd.org, Jilles Tjoelker , Ed Maste Cc: Marshall Kirk McKusick Message-ID: <69977864-0a68-909d-8ecb-1d72c0ec0ef9@delphij.net> Subject: _POSIX_C_SOURCE and S_IFMT macros --91OnLhtfkkNYnIHeNGLSbk1DS1MEbU2W9 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Hi, I recently discovered [1] a difference between FreeBSD's handling of _POSIX_C_SOURCE and what I have observe on Linux and macOS systems, basically, if a program defines _POSIX_C_SOURCE to 200809L, but did not define _XOPEN_SOURCE, we will not define S_IFMT when sys/stat.h is includ= ed. It appears that the glibc version of sys/stat.h won't define it either, but their fcntl.h would define it by having _POSIX_C_SOURCE >=3D 200809L to define _USE_XOPEN2K8 and expose it. A quick glance on my Macbook suggests that they were defining the S_IFMT macros unconditionally. Based on my research, hiding these macros started in revision 40491 of CSRG repository ( https://svnweb.freebsd.org/csrg?view=3Drevision&revision=3D40491 ); NetBS= D chose to make the macro visible when _XOPEN_SOURCE in revision 1.34 and expanded the visibility scope to also cover _NETBSD_SOURCE. Do we need to hide these with 200809L when _XOPEN_SOURCE is not defined? If I'm reading the standards correctly, I think we are required to define these in modern POSIX revisions? [1] When building pigz (https://github.com/madler/pigz), I got: cc -O3 -Wall -Wextra -Wno-unknown-pragmas -Wcast-qual -c pigz.c -o pigz.= o pigz.c:3817:47: error: use of undeclared identifier 'S_IFMT' if (stat(from, &st) !=3D 0 || (st.st_mode & S_IFMT) !=3D S_IFREG) ^ [...] --91OnLhtfkkNYnIHeNGLSbk1DS1MEbU2W9-- --3HCik9fKRoooaqEco88ihSK1eM5qKyEZj Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEEceNg5NEMZIki80nQQHl/fJX0g08FAmAOiZkFAwAAAAAACgkQQHl/fJX0g0+I EhAAnzcCPtyTeC1Uj40yVGsKbgZ9Xt1xVfUPGlEREJDkOvy7md0tHrNVgjb+Apqjxoz6kbPKtTUr zf5kiJK+vpQ0ocPZoDtG8NNyMEwG0CFCipu9QEw1cBNEq3kfDEaEJb4wfiSUvmFsBDWFpBkq/YPQ Vjv0cln24ydzr9Dw0yTv7+z49EVsg0GwL+t8954SuEBMqbBIvr6Yi9g7E9ZxuL3yOdFkUttF4Yf0 eUNjB2WmAko33jGIAitHzW6zIFheo6EG+57GyHpWRX0lhQRR8Wqx3YFJSShWrJsxzDsxD7rneqAY N4n0/d6Ek0jKjHBb2TZdB2Zm15T7GTOgoeAZUcumvjHJFoFYjBJjamJGcHZOaDT28vxluVLQQdmc joFyXIwNoENqKJYtjyAtIXPrby7WdfvVxfR8mFrIitH79IpfbKTrPZSxPhG49lWCvy0x3/++VKo2 7jKAzPdoZShFgAe1hjZRqVZuY4lWXYvUrVZL7IR7CCB8J1VjmKwiIO6cgCX/A1w1KV5ECSDyeDlL Pdbtixi00IMOqjsiBb8hzfTtPLbBxbCJh6oQP5SuE+kv5f2yUV/6OIlgAiK3hy6A9N//zDUmqFOF nO5axK0R+xOruGxdYO/7pp8+0d4gwC8uYssCCErQ5ixl6KkSt7mBHwx9FTMqb3BAPn1McicEshKs R9o= =+bO/ -----END PGP SIGNATURE----- --3HCik9fKRoooaqEco88ihSK1eM5qKyEZj--