[Top][All Lists]

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

Re: fcntl for mingw

From: Michael Kerrisk (man-pages)
Subject: Re: fcntl for mingw
Date: Sat, 24 Mar 2012 16:49:36 +1300


On Tue, Dec 15, 2009 at 6:16 PM, Eric Blake <address@hidden> wrote:
> 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.



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 ),
@@ -90,7 +90,7 @@ or
 is specified if the argument is not required.
 .SS "Duplicating a file descriptor"
-.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.
-.BR F_DUPFD_CLOEXEC " (\fIlong\fP; since Linux 2.6.24)"
+.BR F_DUPFD_CLOEXEC " (\fIint\fP; since Linux 2.6.24)"
 As for
 but additionally set the
@@ -139,7 +139,7 @@ Read the file descriptor flags;
 .I arg
 is ignored.
-.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.
-.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.
-.BR F_SETOWN " (\fIlong\fP)"
+.BR F_SETOWN " (\fIint\fP)"
 Set the process ID or process group ID that will receive
@@ -663,7 +663,7 @@ the signal handler if installed with
 .I arg
 is ignored.
-.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.
-.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)"
-.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"
-.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/

reply via email to

[Prev in Thread] Current Thread [Next in Thread]