__DATA__ and fcntl flags

2005-09-09 Thread Rafael Garcia-Suarez
In toke.c, in the part of code that sets the file descriptor for __DATA__,
there is this chunk of code :

#if defined(HAS_FCNTL)  defined(F_SETFD)
{
const int fd = PerlIO_fileno(PL_rsfp);
fcntl(fd,F_SETFD,fd = 3);
}
#endif

The 3rd argument to fcntl() puzzles me.
It's supposed to be a sum of flags, not a boolean value. Thus it
doesn't look portable at all.

On Linux and BSD it looks like this code tries to set O_WRONLY on
the __DATA__ filehandle, which is obviously wrong (and won't
succeed anyway.) My fcntl(2) manpage says :
On Linux this command can only change the  O_APPEND,  O_ASYNC,
O_DIRECT, O_NOATIME, and O_NONBLOCK flags.

What's the sensible thing to do ?


Re: __DATA__ and fcntl flags

2005-09-09 Thread Rafael Garcia-Suarez
I wrote:
 
 What's the sensible thing to do ?

Ooh, Spider Boardman points to me that I misread F_SETFD as F_SETFL.
I blame a friday afternoon and a hard week...