Re: fcntl for mingw

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


Hello,

On Tue, Dec 15, 2009 at 6:16 PM, Eric Blake <ebb9@xxxxxxx> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> According to Bruno Haible on 12/11/2009 8:38 AM:
>>> +  switch (action)
>>> +    {
>>> +    case F_DUPFD_CLOEXEC:
>>> +      {
>>> +        int target = va_arg (arg, int);
>>
>> Is the arg of type 'int' or 'long'? POSIX says it's an 'int'. But
>> the Linux man page
>>   <http://www.kernel.org/doc/man-pages/online/pages/man2/fcntl.2.html>
>> says it's 'long' "in most cases", and indeed glibc's fcntl.c implementation
>> uses a 'void *', that is, the same as a 'long'.
>
> That's (hopefully) a bug in the Linux man page.  The return type is int,
> and since the arg is an fd and the return type an fd, they had better be
> the same type.  But all the same, I'm cc'ing the man page maintainer.

Who is finally responding.

>> It makes a difference on big-endian 64-bit platforms (SPARC64, PPC64),
>
> No one writes fcntl(fd,F_DUPFD,1L), since that is contrary to POSIX; and
> if fcntl(fd,F_DUPFD,1) doesn't work, then that is a bug in the kernel.

Agreed. And POSIX explicitly says "int" for various other F_* commands
as well. I think in every case, where the man page says "long" it
should probably say "int". (I think the man page was written from the
kernel-source perspective, where everything really is "long", but I
would likewise consider this a bug if the user needed to specify "1L"
and so on.)

I have applied the patch below for man-pages-3.38. Comments welcome.

Thanks,

Michael

diff --git a/man2/fcntl.2 b/man2/fcntl.2
index b2a985a..4b1b14f 100644
--- a/man2/fcntl.2
+++ b/man2/fcntl.2
@@ -82,7 +82,7 @@ Whether or not this argument is required is determined by
 The required argument type is indicated in parentheses after each
 .I cmd
 name (in most cases, the required type is
-.IR long ,
+.IR int ,
 and we identify the argument using the name
 .IR arg ),
 or
@@ -90,7 +90,7 @@ or
 is specified if the argument is not required.
 .SS "Duplicating a file descriptor"
 .TP
-.BR F_DUPFD " (\fIlong\fP)"
+.BR F_DUPFD " (\fIint\fP)"
 Find the lowest numbered available file descriptor
 greater than or equal to
 .I arg
@@ -106,7 +106,7 @@ See
 .BR dup (2)
 for further details.
 .TP
-.BR F_DUPFD_CLOEXEC " (\fIlong\fP; since Linux 2.6.24)"
+.BR F_DUPFD_CLOEXEC " (\fIint\fP; since Linux 2.6.24)"
 As for
 .BR F_DUPFD ,
 but additionally set the
@@ -139,7 +139,7 @@ Read the file descriptor flags;
 .I arg
 is ignored.
 .TP
-.BR F_SETFD " (\fIlong\fP)"
+.BR F_SETFD " (\fIint\fP)"
 Set the file descriptor flags to the value specified by
 .IR arg .
 .SS "File status flags"
@@ -166,7 +166,7 @@ Get the file access mode and the file status flags;
 .I arg
 is ignored.
 .TP
-.BR F_SETFL " (\fIlong\fP)"
+.BR F_SETFL " (\fIint\fP)"
 Set the file status flags to the value specified by
 .IR arg .
 File access mode
@@ -455,7 +455,7 @@ process group IDs are returned as negative values
(but see BUGS below).
 .I arg
 is ignored.
 .TP
-.BR F_SETOWN " (\fIlong\fP)"
+.BR F_SETOWN " (\fIint\fP)"
 Set the process ID or process group ID that will receive
 .B SIGIO
 and
@@ -663,7 +663,7 @@ the signal handler if installed with
 .I arg
 is ignored.
 .TP
-.BR F_SETSIG " (\fIlong\fP)"
+.BR F_SETSIG " (\fIint\fP)"
 Set the signal sent when input or output becomes possible
 to the value given in
 .IR arg .
@@ -774,7 +774,7 @@ or
 .BR truncate (2)
 the file referred to by that file descriptor.
 .TP
-.BR F_SETLEASE " (\fIlong\fP)"
+.BR F_SETLEASE " (\fIint\fP)"
 Set or remove a file lease according to which of the following
 values is specified in the integer
 .IR arg :
@@ -912,7 +912,7 @@ that has been accessed by another process.
 (This is useful if the caller holds leases against multiple files).
 .SS "File and directory change notification (dnotify)"
 .TP
-.BR F_NOTIFY " (\fIlong\fP)"
+.BR F_NOTIFY " (\fIint\fP)"
 (Linux 2.4 onward)
 Provide notification when the directory referred to by
 .I fd
@@ -1004,7 +1004,7 @@ See
 .BR inotify (7).
 .SS "Changing the capacity of a pipe"
 .TP
-.BR F_SETPIPE_SZ " (\fIlong\fP; since Linux 2.6.35)"
+.BR F_SETPIPE_SZ " (\fIint\fP; since Linux 2.6.35)"
 Change the capacity of the pipe referred to by
 .I fd
 to be at least


-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Author of "The Linux Programming Interface"; http://man7.org/tlpi/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Memory]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Photo]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]     [Linux Resources]

Add to Google Powered by Linux