standards/188173: O_NOFOLLOW visibility not POSIX 2008 conforming
Jilles Tjoelker
jilles at stack.nl
Sat Apr 5 20:50:01 UTC 2014
The following reply was made to PR standards/188173; it has been noted by GNATS.
From: Jilles Tjoelker <jilles at stack.nl>
To: Konstantin Belousov <kostikbel at gmail.com>
Cc: Christian Neukirchen <chneukirchen at gmail.com>, standards at freebsd.org,
freebsd-gnats-submit at FreeBSD.org
Subject: Re: standards/188173: O_NOFOLLOW visibility not POSIX 2008 conforming
Date: Sat, 5 Apr 2014 22:47:48 +0200
On Sat, Apr 05, 2014 at 11:16:07PM +0300, Konstantin Belousov wrote:
> On Tue, Apr 01, 2014 at 03:31:31PM +0000, Christian Neukirchen wrote:
> > >Fix:
> > Adjust the condition in /usr/include/sys/fcntl.h to use _POSIX_C_SOURCE >= 200809
> >
> > #if __BSD_VISIBLE
> > #define O_NOFOLLOW 0x0100 /* don't follow symlinks */
> > #endif
> >
> Thank you for noting this. Still, I want to formally request your
> confirmation that the following patch works for you. I only have 1003.1,
> 2013 access right now.
> diff --git a/sys/sys/fcntl.h b/sys/sys/fcntl.h
> index 3461f8b..2691449 100644
> --- a/sys/sys/fcntl.h
> +++ b/sys/sys/fcntl.h
> @@ -96,7 +96,7 @@ typedef __pid_t pid_t;
> #define O_FSYNC 0x0080 /* synchronous writes */
> #endif
> #define O_SYNC 0x0080 /* POSIX synonym for O_FSYNC */
> -#if __BSD_VISIBLE
> +#if __POSIX_VISIBLE >= 200809
> #define O_NOFOLLOW 0x0100 /* don't follow symlinks */
> #endif
> #define O_CREAT 0x0200 /* create if nonexistent */
This looks good, but I went ahead and made the other new POSIX.1-2008
things visible as well and removed redundant __BSD_VISIBLE condition
parts:
Index: sys/sys/fcntl.h
===================================================================
--- sys/sys/fcntl.h (revision 263842)
+++ sys/sys/fcntl.h (working copy)
@@ -96,7 +96,7 @@ typedef __pid_t pid_t;
#define O_FSYNC 0x0080 /* synchronous writes */
#endif
#define O_SYNC 0x0080 /* POSIX synonym for O_FSYNC */
-#if __BSD_VISIBLE
+#if __POSIX_VISIBLE >= 200809
#define O_NOFOLLOW 0x0100 /* don't follow symlinks */
#endif
#define O_CREAT 0x0200 /* create if nonexistent */
@@ -115,7 +115,7 @@ typedef __pid_t pid_t;
#endif
/* Defined by POSIX Extended API Set Part 2 */
-#if __BSD_VISIBLE
+#if __POSIX_VISIBLE >= 200809
#define O_DIRECTORY 0x00020000 /* Fail if not directory */
#define O_EXEC 0x00040000 /* Open for execute only */
#endif
@@ -184,7 +184,7 @@ typedef __pid_t pid_t;
#endif
/* Defined by POSIX Extended API Set Part 2 */
-#if __BSD_VISIBLE
+#if __POSIX_VISIBLE >= 200809
/*
* Magic value that specify the use of the current working directory
* to determine the target of relative file paths in the openat() and
@@ -211,7 +211,7 @@ typedef __pid_t pid_t;
#define F_SETFD 2 /* set file descriptor flags */
#define F_GETFL 3 /* get file status flags */
#define F_SETFL 4 /* set file status flags */
-#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
+#if __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
#define F_GETOWN 5 /* get SIGIO/SIGURG proc/pgrp */
#define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */
#endif
@@ -229,7 +229,7 @@ typedef __pid_t pid_t;
#define F_READAHEAD 15 /* read ahead */
#define F_RDAHEAD 16 /* Darwin compatible read ahead */
#endif
-#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
+#if __POSIX_VISIBLE >= 200809
#define F_DUPFD_CLOEXEC 17 /* Like F_DUPFD, but FD_CLOEXEC is set */
#endif
#if __BSD_VISIBLE
@@ -310,10 +310,10 @@ int fcntl(int, int, ...);
#if __BSD_VISIBLE
int flock(int, int);
#endif
-#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
+#if __POSIX_VISIBLE >= 200809
int openat(int, const char *, int, ...);
#endif
-#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112
+#if __POSIX_VISIBLE >= 200112
int posix_fadvise(int, off_t, off_t, int);
int posix_fallocate(int, off_t, off_t);
#endif
For testing, I compiled (using -std=c99) and ran the following:
#define _POSIX_C_SOURCE 200809
#include <fcntl.h>
int
main(int argc, char **argv)
{
if (argc != 2)
return 2;
int fd = open(argv[1], O_RDONLY | O_NOFOLLOW);
if (fd == -1)
return 1;
return 0;
}
and likewise with #define _XOPEN_SOURCE 700 instead of #define
_POSIX_C_SOURCE 200809.
--
Jilles Tjoelker
More information about the freebsd-standards
mailing list