Re: [PATCH] uapi/fcntl: conditionally define AT_RENAME* macros
From: Randy Dunlap <hidden>
Date: 2025-08-24 23:54:52
Also in:
linux-fsdevel, lkml
On 8/24/25 4:21 PM, Matthew Wilcox wrote:
On Sun, Aug 24, 2025 at 03:10:55PM -0700, Randy Dunlap wrote:quoted
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