> From: Derek Price
> Sent: Tuesday, September 27, 2005 06:32
> 
> Two thoughts.  First, assuming that you have a single fd namespace,
> which I am not sure of, then you could wrap only the open() functions
> used by CVS to store an index into a private array or hash which
> retained whatever information about the new file descriptor that you wished.

We can skip this given what is said below.

> Secondly, I think all this determining the difference between sockets
> and files is all moot - Windows handling is already so different for
> sockets and files that we have to use recv() with sockets instead of
> read(), which is why we were dealing with all that socket-client stuff
> last week. All CVS sockets on Windows are wrapped in socket_buffers
> rather than fd_buffers.  Anyhow, the select() function in
> fd_buffer_input() will only ever need to tell the difference between a
> pipe and a file descriptor on Windows, for that reason.

Eureka!!!  You're brillaint!!!!!!

A generalized "select" replacement to handle mixing socket and CRT handles
has the overlapped number space problem.

A solution for files and pipes doesn't have the overlapped number space
problem because the functions that creates pipes in "windows-NT/run.c"
wraps the Win32 API HANDLEs with "_open_osfhandle" which puts them in the
CRT number space.

Distinguishing between disks and pipes with sockets out of the picture is
trivial with the "GetFileType" Win32 API function:
http://msdn.microsoft.com/library/en-us/fileio/fs/getfiletype.asp

> Regards,

Ditto,

> Derek

Conrad



_______________________________________________
Bug-cvs mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/bug-cvs

Reply via email to