On 8/24/25 4:21 PM, Matthew Wilcox wrote: > On Sun, Aug 24, 2025 at 03:10:55PM -0700, Randy Dunlap wrote: >> Don't define the AT_RENAME_* macros when __USE_GNU is defined since >> /usr/include/stdio.h defines them in that case (i.e. when _GNU_SOURCE >> is defined, which causes __USE_GNU to be defined). >> >> Having them defined in 2 places causes build warnings (duplicate >> definitions) in both samples/watch_queue/watch_test.c and >> samples/vfs/test-statx.c. > > It does? What flags? > for samples/vfs/test-statx.c: In file included from ../samples/vfs/test-statx.c:23: usr/include/linux/fcntl.h:159:9: warning: ‘AT_RENAME_NOREPLACE’ redefined 159 | #define AT_RENAME_NOREPLACE 0x0001 In file included from ../samples/vfs/test-statx.c:13: /usr/include/stdio.h:171:10: note: this is the location of the previous definition 171 | # define AT_RENAME_NOREPLACE RENAME_NOREPLACE usr/include/linux/fcntl.h:160:9: warning: ‘AT_RENAME_EXCHANGE’ redefined 160 | #define AT_RENAME_EXCHANGE 0x0002 /usr/include/stdio.h:173:10: note: this is the location of the previous definition 173 | # define AT_RENAME_EXCHANGE RENAME_EXCHANGE usr/include/linux/fcntl.h:161:9: warning: ‘AT_RENAME_WHITEOUT’ redefined 161 | #define AT_RENAME_WHITEOUT 0x0004 /usr/include/stdio.h:175:10: note: this is the location of the previous definition 175 | # define AT_RENAME_WHITEOUT RENAME_WHITEOUT for samples/watch_queue/watch_test.c: In file included from usr/include/linux/watch_queue.h:6, from ../samples/watch_queue/watch_test.c:19: usr/include/linux/fcntl.h:159:9: warning: ‘AT_RENAME_NOREPLACE’ redefined 159 | #define AT_RENAME_NOREPLACE 0x0001 In file included from ../samples/watch_queue/watch_test.c:11: /usr/include/stdio.h:171:10: note: this is the location of the previous definition 171 | # define AT_RENAME_NOREPLACE RENAME_NOREPLACE usr/include/linux/fcntl.h:160:9: warning: ‘AT_RENAME_EXCHANGE’ redefined 160 | #define AT_RENAME_EXCHANGE 0x0002 /usr/include/stdio.h:173:10: note: this is the location of the previous definition 173 | # define AT_RENAME_EXCHANGE RENAME_EXCHANGE usr/include/linux/fcntl.h:161:9: warning: ‘AT_RENAME_WHITEOUT’ redefined 161 | #define AT_RENAME_WHITEOUT 0x0004 /usr/include/stdio.h:175:10: note: this is the location of the previous definition 175 | # define AT_RENAME_WHITEOUT RENAME_WHITEOUT > #define AT_RENAME_NOREPLACE 0x0001 > #define AT_RENAME_NOREPLACE 0x0001 > > int main(void) > { > return AT_RENAME_NOREPLACE; > } > > gcc -W -Wall testA.c -o testA > > (no warnings) > > I'm pretty sure C says that duplicate definitions are fine as long > as they're identical. The vales are identical but the strings are not identical. We can't fix stdio.h, but we could just change uapi/linux/fcntl.h to match stdio.h. I suppose. -- ~Randy