* fhandler_dsp.cc (fhandler_dsp::ioctl): Return 0 for successful

SNDCTL_DSP_GETBLKSIZE operation.  Remove obsolete 'name' arg from fhandler_*
constructors throughout.
* winsup.h (winsock_active): New macro.
(winsock2_active): Ditto.
* autoload.cc (wsock_init): Use new macros to decide if winsock or winsock2 is
loaded.
(nonexist_wsock32): Dummy function to force winsock load.
(nonexist_ws2_32): Dummy function to force winsock2 load.
* fhandler.h (fhandler_socket::fstat): Declare new method.  Currently unused.
* fhandler_socket.cc (fhandler_socket::fixup_before_fork_exec): Check that
winsock2 is active before trying WSADuplicateSocketA.
(fhandler_socket::fixup_after_fork): Add extra check for winsock2_active.
Otherwise use iffy procedures for Windows 95.
(fhandler_socket::fixup_after_exec): Add debugging.
(fhandler_socket::dup): Add debugging.
(fhandler_socket::fstat): New method.
(fhandler_socket::set_close_on_exec): Attempt to perform iffy stuff on Windows
95.
* errno.cc (_sys_nerr): Work around compiler strangeness.
* pinfo.cc (winpids::add): Add extra element at end of allocated array for
setting to NULL.
(winpids::enumNT): Ditto.
(winpids::init): Don't modify pidlist if it hasn't been allocated
(possibly due to malloc problem).
This commit is contained in:
Christopher Faylor 2001-10-13 17:23:35 +00:00
parent 5dec13e179
commit 0476bae576
25 changed files with 190 additions and 137 deletions

View File

@ -1,3 +1,37 @@
2001-10-13 Ralf Habacker <Ralf.Habacker@freenet.de>
* fhandler_dsp.cc (fhandler_dsp::ioctl): Return 0 for successful
SNDCTL_DSP_GETBLKSIZE operation.
2001-10-13 Christopher Faylor <cgf@redhat.com>
Remove obsolete 'name' arg from fhandler_* constructors throughout.
* winsup.h (winsock_active): New macro.
(winsock2_active): Ditto.
* autoload.cc (wsock_init): Use new macros to decide if winsock or
winsock2 is loaded.
(nonexist_wsock32): Dummy function to force winsock load.
(nonexist_ws2_32): Dummy function to force winsock2 load.
* fhandler.h (fhandler_socket::fstat): Declare new method. Currently
unused.
* fhandler_socket.cc (fhandler_socket::fixup_before_fork_exec): Check
that winsock2 is active before trying WSADuplicateSocketA.
(fhandler_socket::fixup_after_fork): Add extra check for
winsock2_active. Otherwise use iffy procedures for Windows 95.
(fhandler_socket::fixup_after_exec): Add debugging.
(fhandler_socket::dup): Add debugging.
(fhandler_socket::fstat): New method.
(fhandler_socket::set_close_on_exec): Attempt to perform iffy stuff on
Windows 95.
* errno.cc (_sys_nerr): Work around compiler strangeness.
* pinfo.cc (winpids::add): Add extra element at end of allocated array
for setting to NULL.
(winpids::enumNT): Ditto.
(winpids::init): Don't modify pidlist if it hasn't been allocated
(possibly due to malloc problem).
2001-10-12 Christopher Faylor <cgf@redhat.com>
* autoload.cc (wsock_init): Reorganize slightly to accomodate a new

View File

@ -241,7 +241,6 @@ static long long
wsock_init ()
{
static LONG NO_COPY here = -1L;
extern WSADATA wsadata;
struct func_info *func = (struct func_info *) __builtin_return_address (0);
struct dll_info *dll = func->dll;
@ -261,7 +260,7 @@ wsock_init ()
Sleep (0);
}
if (!wsock_started && (wsock32_handle || ws2_32_handle))
if (!wsock_started && (winsock_active || winsock2_active))
{
/* Don't use autoload to load WSAStartup to eliminate recursion. */
int (*wsastartup) (int, WSADATA *);
@ -421,7 +420,7 @@ LoadDLLfunc (WSAAsyncSelect, 16, wsock32)
LoadDLLfunc (WSACleanup, 0, wsock32)
LoadDLLfunc (WSAGetLastError, 0, wsock32)
LoadDLLfunc (WSASetLastError, 4, wsock32)
LoadDLLfunc (WSAStartup, 8, wsock32)
// LoadDLLfunc (WSAStartup, 8, wsock32)
LoadDLLfunc (__WSAFDIsSet, 8, wsock32)
LoadDLLfunc (accept, 12, wsock32)
LoadDLLfunc (bind, 12, wsock32)

View File

@ -265,63 +265,63 @@ dtable::build_fhandler (int fd, DWORD dev, const char *name, int unit)
switch (dev)
{
case FH_TTYM:
fh = cnew (fhandler_tty_master) (name, unit);
fh = cnew (fhandler_tty_master) (unit);
break;
case FH_CONSOLE:
case FH_CONIN:
case FH_CONOUT:
fh = cnew (fhandler_console) (name);
fh = cnew (fhandler_console) ();
inc_console_fds ();
break;
case FH_PTYM:
fh = cnew (fhandler_pty_master) (name);
fh = cnew (fhandler_pty_master) ();
break;
case FH_TTYS:
if (unit < 0)
fh = cnew (fhandler_tty_slave) (name);
fh = cnew (fhandler_tty_slave) ();
else
fh = cnew (fhandler_tty_slave) (unit, name);
fh = cnew (fhandler_tty_slave) (unit);
break;
case FH_WINDOWS:
fh = cnew (fhandler_windows) (name);
fh = cnew (fhandler_windows) ();
break;
case FH_SERIAL:
fh = cnew (fhandler_serial) (name, dev, unit);
fh = cnew (fhandler_serial) (unit);
break;
case FH_PIPE:
case FH_PIPER:
case FH_PIPEW:
fh = cnew (fhandler_pipe) (name, dev);
fh = cnew (fhandler_pipe) ();
break;
case FH_SOCKET:
fh = cnew (fhandler_socket) (name);
fh = cnew (fhandler_socket) ();
break;
case FH_DISK:
fh = cnew (fhandler_disk_file) (NULL);
fh = cnew (fhandler_disk_file) ();
break;
case FH_FLOPPY:
fh = cnew (fhandler_dev_floppy) (name, unit);
fh = cnew (fhandler_dev_floppy) (unit);
break;
case FH_TAPE:
fh = cnew (fhandler_dev_tape) (name, unit);
fh = cnew (fhandler_dev_tape) (unit);
break;
case FH_NULL:
fh = cnew (fhandler_dev_null) (name);
fh = cnew (fhandler_dev_null) ();
break;
case FH_ZERO:
fh = cnew (fhandler_dev_zero) (name);
fh = cnew (fhandler_dev_zero) ();
break;
case FH_RANDOM:
fh = cnew (fhandler_dev_random) (name, unit);
fh = cnew (fhandler_dev_random) (unit);
break;
case FH_MEM:
fh = cnew (fhandler_dev_mem) (name, unit);
fh = cnew (fhandler_dev_mem) (unit);
break;
case FH_CLIPBOARD:
fh = cnew (fhandler_dev_clipboard) (name);
fh = cnew (fhandler_dev_clipboard) ();
break;
case FH_OSS_DSP:
fh = cnew (fhandler_dev_dsp) (name);
fh = cnew (fhandler_dev_dsp) ();
break;
default:
{

View File

@ -8,12 +8,16 @@ This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
#define _sys_nerr FOO_sys_nerr
#define sys_nerr FOOsys_nerr
#include "winsup.h"
#define _REENT_ONLY
#include <stdio.h>
#include <errno.h>
#include "cygerrno.h"
#include "thread.h"
#undef _sys_nerr
#undef sys_nerr
/* Table to map Windows error codes to Errno values. */
/* FIXME: Doing things this way is a little slow. It's trivial to change
@ -145,7 +149,8 @@ seterrno (const char *file, int line)
extern char *_user_strerror _PARAMS ((int));
extern const NO_COPY char __declspec(dllexport) * const _sys_errlist[]=
extern "C" {
const NO_COPY char __declspec(dllexport) * const _sys_errlist[]=
{
/* NOERROR 0 */ "No error",
/* EPERM 1 */ "Not super-user",
@ -287,8 +292,8 @@ extern const NO_COPY char __declspec(dllexport) * const _sys_errlist[]=
/* ECASECLASH 137 */ "Filename exists with different case"
};
int NO_COPY __declspec(dllexport) _sys_nerr =
sizeof (_sys_errlist) / sizeof (_sys_errlist[0]);
extern int const NO_COPY __declspec(dllexport) _sys_nerr = sizeof (_sys_errlist) / sizeof (_sys_errlist[0]);
};
/* FIXME: Why is strerror() a long switch and not just:
return sys_errlist[errnum];

View File

@ -1329,7 +1329,7 @@ fhandler_base::operator delete (void *p)
}
/* Normal I/O constructor */
fhandler_base::fhandler_base (DWORD devtype, const char *name, int unit):
fhandler_base::fhandler_base (DWORD devtype, int unit):
access (0),
io_handle (NULL),
namehash (0),
@ -1369,8 +1369,8 @@ fhandler_base::~fhandler_base (void)
/**********************************************************************/
/* fhandler_disk_file */
fhandler_disk_file::fhandler_disk_file (const char *name) :
fhandler_base (FH_DISK, name)
fhandler_disk_file::fhandler_disk_file () :
fhandler_base (FH_DISK)
{
set_cb (sizeof *this);
}
@ -1598,8 +1598,8 @@ fhandler_disk_file::lock (int cmd, struct flock *fl)
/**********************************************************************/
/* /dev/null */
fhandler_dev_null::fhandler_dev_null (const char *name) :
fhandler_base (FH_NULL, name)
fhandler_dev_null::fhandler_dev_null () :
fhandler_base (FH_NULL)
{
set_cb (sizeof *this);
}

View File

@ -188,7 +188,7 @@ public:
void reset_unix_path_name (const char *);
virtual fhandler_base& operator =(fhandler_base &x);
fhandler_base (DWORD dev, const char *name = 0, int unit = 0);
fhandler_base (DWORD dev, int unit = 0);
virtual ~fhandler_base ();
/* Non-virtual simple accessor functions. */
@ -385,7 +385,7 @@ private:
struct _WSAPROTOCOL_INFOA *prot_info_ptr;
public:
fhandler_socket (const char *name = 0);
fhandler_socket ();
~fhandler_socket ();
int get_socket () { return (int) get_handle(); }
fhandler_socket * is_socket () { return this; }
@ -422,6 +422,7 @@ public:
int check_peer_secret_event (struct sockaddr_in *peer, int *secret = NULL);
void signal_secret_event ();
void close_secret_event ();
int __stdcall fstat (struct stat *buf, path_conv *) __attribute__ ((regparm (2)));
};
class fhandler_pipe: public fhandler_base
@ -431,7 +432,7 @@ class fhandler_pipe: public fhandler_base
DWORD orig_pid;
unsigned id;
public:
fhandler_pipe (const char *name = 0, DWORD devtype = FH_PIPE);
fhandler_pipe (DWORD devtype = FH_PIPE);
off_t lseek (off_t offset, int whence);
select_record *select_read (select_record *s);
select_record *select_write (select_record *s);
@ -470,7 +471,7 @@ protected:
/* returns not null, if `win_error' determines an end of file condition */
virtual int is_eof(int win_error) = 0;
fhandler_dev_raw (DWORD dev, const char *name, int unit);
fhandler_dev_raw (DWORD dev, int unit);
public:
~fhandler_dev_raw (void);
@ -498,7 +499,7 @@ protected:
virtual int is_eof (int win_error);
public:
fhandler_dev_floppy (const char *name, int unit);
fhandler_dev_floppy (int unit);
virtual int open (path_conv *, int flags, mode_t mode = 0);
virtual int close (void);
@ -520,7 +521,7 @@ protected:
virtual int is_eof (int win_error);
public:
fhandler_dev_tape (const char *name, int unit);
fhandler_dev_tape (int unit);
int open (path_conv *, int flags, mode_t mode = 0);
int close (void);
@ -551,7 +552,7 @@ private:
class fhandler_disk_file: public fhandler_base
{
public:
fhandler_disk_file (const char *name);
fhandler_disk_file ();
int open (path_conv * real_path, int flags, mode_t mode);
int close ();
@ -579,7 +580,7 @@ public:
OVERLAPPED io_status;
/* Constructor */
fhandler_serial (const char *name, DWORD devtype = FH_SERIAL, int unit = 0);
fhandler_serial (DWORD devtype = FH_SERIAL, int unit = 0);
int open (path_conv *, int flags, mode_t mode);
int close ();
@ -627,8 +628,8 @@ protected:
virtual int accept_input () {return 1;};
public:
tty_min *tc;
fhandler_termios (DWORD dev, const char *name = 0, int unit = 0) :
fhandler_base (dev, name, unit)
fhandler_termios (DWORD dev, int unit = 0) :
fhandler_base (dev, unit)
{
set_need_fork_fixup ();
}
@ -740,7 +741,7 @@ private:
public:
fhandler_console (const char *name);
fhandler_console ();
fhandler_console* is_console () { return this; }
@ -775,9 +776,8 @@ public:
class fhandler_tty_common: public fhandler_termios
{
public:
fhandler_tty_common (DWORD dev, const char *name = 0, int unit = 0) :
fhandler_termios (dev, name, unit),
ttynum (unit)
fhandler_tty_common (DWORD dev, int unit = 0)
: fhandler_termios (dev, unit), ttynum (unit)
{
// nothing to do
}
@ -814,8 +814,8 @@ class fhandler_tty_slave: public fhandler_tty_common
{
public:
/* Constructor */
fhandler_tty_slave (const char *name);
fhandler_tty_slave (int, const char *name);
fhandler_tty_slave ();
fhandler_tty_slave (int);
int open (path_conv *, int flags, mode_t mode = 0);
int write (const void *ptr, size_t len);
@ -839,7 +839,7 @@ public:
int need_nl; // Next read should start with \n
/* Constructor */
fhandler_pty_master (const char *name, DWORD devtype = FH_PTYM, int unit = -1);
fhandler_pty_master (DWORD devtype = FH_PTYM, int unit = -1);
int process_slave_output (char *buf, size_t len, int pktmode_on);
void doecho (const void *str, DWORD len);
@ -865,7 +865,7 @@ class fhandler_tty_master: public fhandler_pty_master
{
public:
/* Constructor */
fhandler_tty_master (const char *name, int unit);
fhandler_tty_master (int unit);
fhandler_console *console; // device handler to perform real i/o.
HANDLE hThread; // process_output thread handle.
@ -878,7 +878,7 @@ public:
class fhandler_dev_null: public fhandler_base
{
public:
fhandler_dev_null (const char *name);
fhandler_dev_null ();
void dump ();
select_record *select_read (select_record *s);
@ -889,7 +889,7 @@ public:
class fhandler_dev_zero: public fhandler_base
{
public:
fhandler_dev_zero (const char *name);
fhandler_dev_zero ();
int open (path_conv *, int flags, mode_t mode = 0);
int write (const void *ptr, size_t len);
int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
@ -911,7 +911,7 @@ protected:
int pseudo_read (void *ptr, size_t len);
public:
fhandler_dev_random (const char *name, int unit);
fhandler_dev_random (int unit);
int get_unit () { return unit; }
int open (path_conv *, int flags, mode_t mode = 0);
int write (const void *ptr, size_t len);
@ -931,7 +931,7 @@ protected:
DWORD pos;
public:
fhandler_dev_mem (const char *name, int unit);
fhandler_dev_mem (int unit);
~fhandler_dev_mem (void);
int open (path_conv *, int flags, mode_t mode = 0);
@ -954,7 +954,7 @@ public:
class fhandler_dev_clipboard: public fhandler_base
{
public:
fhandler_dev_clipboard (const char *name);
fhandler_dev_clipboard ();
int is_windows (void) { return 1; }
int open (path_conv *, int flags, mode_t mode = 0);
int write (const void *ptr, size_t len);
@ -979,7 +979,7 @@ private:
HWND hWnd_; // the window whose messages are to be retrieved by read() call
int method_; // write method (Post or Send)
public:
fhandler_windows (const char *name = 0);
fhandler_windows ();
int is_windows (void) { return 1; }
int open (path_conv *, int flags, mode_t mode = 0);
int write (const void *ptr, size_t len);
@ -1005,7 +1005,7 @@ private:
int audiochannels_;
bool setupwav(const char *pData, int nBytes);
public:
fhandler_dev_dsp (const char *name = 0);
fhandler_dev_dsp ();
~fhandler_dev_dsp();
int open (path_conv *, int flags, mode_t mode = 0);

View File

@ -32,8 +32,8 @@ static const NO_COPY char *CYGWIN_NATIVE = "CYGWIN_NATIVE_CLIPBOARD";
/* this is MT safe because windows format id's are atomic */
static UINT cygnativeformat;
fhandler_dev_clipboard::fhandler_dev_clipboard (const char *name):
fhandler_base (FH_CLIPBOARD, name)
fhandler_dev_clipboard::fhandler_dev_clipboard ():
fhandler_base (FH_CLIPBOARD)
{
set_cb (sizeof *this);
eof = true;

View File

@ -862,8 +862,8 @@ fhandler_console::tcgetattr (struct termios *t)
* Constructor.
*/
fhandler_console::fhandler_console (const char *name) :
fhandler_termios (FH_CONSOLE, name, -1)
fhandler_console::fhandler_console () :
fhandler_termios (FH_CONSOLE, -1)
{
set_cb (sizeof *this);
default_color = dim_color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;

View File

@ -420,8 +420,8 @@ fhandler_dev_dsp::setupwav (const char *pData, int nBytes)
}
//------------------------------------------------------------------------
fhandler_dev_dsp::fhandler_dev_dsp (const char *name):
fhandler_base (FH_OSS_DSP, name)
fhandler_dev_dsp::fhandler_dev_dsp ():
fhandler_base (FH_OSS_DSP)
{
set_cb (sizeof *this);
}
@ -526,6 +526,7 @@ fhandler_dev_dsp::ioctl (unsigned int cmd, void *ptr)
CASE (SNDCTL_DSP_GETBLKSIZE)
*intptr = Audio::BLOCK_SIZE;
return 0;
break;
CASE (SNDCTL_DSP_SETFMT)

View File

@ -40,7 +40,7 @@ fhandler_dev_floppy::is_eof (int)
return ret;
}
fhandler_dev_floppy::fhandler_dev_floppy (const char *name, int unit) : fhandler_dev_raw (FH_FLOPPY, name, unit)
fhandler_dev_floppy::fhandler_dev_floppy (int unit) : fhandler_dev_raw (FH_FLOPPY, unit)
{
set_cb (sizeof *this);
}

View File

@ -23,9 +23,8 @@
/**********************************************************************/
/* fhandler_dev_mem */
fhandler_dev_mem::fhandler_dev_mem (const char *name, int nunit)
: fhandler_base (FH_MEM, name),
unit (nunit)
fhandler_dev_mem::fhandler_dev_mem (int nunit)
: fhandler_base (FH_MEM), unit (nunit)
{
/* Reading physical memory only supported on NT/W2K. */
if (!wincap.has_physical_mem_access ())

View File

@ -23,10 +23,8 @@ details. */
#define PSEUDO_MULTIPLIER (6364136223846793005LL)
#define PSEUDO_SHIFTVAL (21)
fhandler_dev_random::fhandler_dev_random (const char *name, int nunit)
: fhandler_base (FH_RANDOM, name),
unit(nunit),
crypt_prov((HCRYPTPROV)NULL)
fhandler_dev_random::fhandler_dev_random (int nunit)
: fhandler_base (FH_RANDOM), unit(nunit), crypt_prov((HCRYPTPROV)NULL)
{
set_cb (sizeof *this);
}

View File

@ -116,7 +116,8 @@ fhandler_dev_raw::writebuf (void)
return ret;
}
fhandler_dev_raw::fhandler_dev_raw (DWORD devtype, const char *name, int unit) : fhandler_base (devtype, name)
fhandler_dev_raw::fhandler_dev_raw (DWORD devtype, int unit)
: fhandler_base (devtype)
{
clear ();
this->unit = unit;

View File

@ -24,8 +24,8 @@ details. */
/**********************************************************************/
/* fhandler_serial */
fhandler_serial::fhandler_serial (const char *name, DWORD devtype, int unit) :
fhandler_base (devtype, name, unit)
fhandler_serial::fhandler_serial (DWORD devtype, int unit) :
fhandler_base (devtype, unit)
{
set_cb (sizeof *this);
vmin_ = 0;

View File

@ -41,8 +41,8 @@ fhandler_dev_random* entropy_source;
/**********************************************************************/
/* fhandler_socket */
fhandler_socket::fhandler_socket (const char *name) :
fhandler_base (FH_SOCKET, name)
fhandler_socket::fhandler_socket () :
fhandler_base (FH_SOCKET)
{
set_cb (sizeof *this);
set_need_fork_fixup ();
@ -62,8 +62,7 @@ fhandler_socket::set_connect_secret ()
if (!entropy_source)
{
void *buf = malloc (sizeof (fhandler_dev_random));
entropy_source = new (buf) fhandler_dev_random (ENTROPY_SOURCE_NAME,
ENTROPY_SOURCE_DEV_UNIT);
entropy_source = new (buf) fhandler_dev_random (ENTROPY_SOURCE_DEV_UNIT);
}
if (entropy_source &&
!entropy_source->open (NULL, O_RDONLY))
@ -115,8 +114,13 @@ fhandler_socket::create_secret_event (int* secret)
void
fhandler_socket::signal_secret_event ()
{
if (secret_event)
SetEvent (secret_event);
if (!secret_event)
debug_printf ("no secret event?");
else
{
SetEvent (secret_event);
debug_printf ("signaled secret_event");
}
}
void
@ -160,54 +164,48 @@ fhandler_socket::check_peer_secret_event (struct sockaddr_in* peer, int* secret)
void
fhandler_socket::fixup_before_fork_exec (DWORD win_proc_id)
{
int ret = 1;
if (prot_info_ptr &&
(ret = WSADuplicateSocketA (get_socket (), win_proc_id, prot_info_ptr)))
{
debug_printf ("WSADuplicateSocket error");
set_winsock_errno ();
}
if (!ret && ws2_32_handle)
{
debug_printf ("WSADuplicateSocket went fine, dwServiceFlags1=%d",
prot_info_ptr->dwServiceFlags1);
}
else
if (!winsock2_active)
{
fhandler_base::fixup_before_fork_exec (win_proc_id);
debug_printf ("Without Winsock 2.0");
}
else if (!WSADuplicateSocketA (get_socket (), win_proc_id, prot_info_ptr))
debug_printf ("WSADuplicateSocket went fine, dwServiceFlags1=%d",
prot_info_ptr->dwServiceFlags1);
else
{
debug_printf ("WSADuplicateSocket error");
set_winsock_errno ();
}
}
void
fhandler_socket::fixup_after_fork (HANDLE parent)
{
SOCKET new_sock = INVALID_SOCKET;
SOCKET new_sock;
debug_printf ("WSASocket begin, dwServiceFlags1=%d",
prot_info_ptr->dwServiceFlags1);
if (prot_info_ptr &&
(new_sock = WSASocketA (FROM_PROTOCOL_INFO,
FROM_PROTOCOL_INFO,
FROM_PROTOCOL_INFO,
prot_info_ptr, 0, 0)) == INVALID_SOCKET)
if ((new_sock = WSASocketA (FROM_PROTOCOL_INFO,
FROM_PROTOCOL_INFO,
FROM_PROTOCOL_INFO,
prot_info_ptr, 0, 0)) == INVALID_SOCKET)
{
debug_printf ("WSASocket error");
set_winsock_errno ();
}
if (new_sock != INVALID_SOCKET && ws2_32_handle)
else if (!new_sock && !winsock2_active)
{
fhandler_base::fixup_after_fork (parent);
debug_printf ("Without Winsock 2.0");
}
else
{
debug_printf ("WSASocket went fine %p", new_sock);
set_io_handle ((HANDLE) new_sock);
}
else
{
#if 0
fhandler_base::fixup_after_fork (parent);
#endif
debug_printf ("Without Winsock 2.0");
}
if (secret_event)
fork_fixup (parent, secret_event, "secret_event");
}
@ -215,21 +213,24 @@ fhandler_socket::fixup_after_fork (HANDLE parent)
void
fhandler_socket::fixup_after_exec (HANDLE parent)
{
extern WSADATA wsadata;
debug_printf ("here");
if (!get_close_on_exec ())
fixup_after_fork (parent);
else if (wsadata.wVersion < 512) /* < Winsock 2.0 */
#if 0
else if (!winsock2_active)
closesocket (get_socket ());
#endif
}
int
fhandler_socket::dup (fhandler_base *child)
{
debug_printf ("here");
fhandler_socket *fhs = (fhandler_socket *) child;
fhs->addr_family = addr_family;
fhs->set_io_handle (get_io_handle ());
fhs->fixup_before_fork_exec (GetCurrentProcessId ());
if (ws2_32_handle)
if (winsock2_active)
{
fhs->fixup_after_fork (hMainProc);
return 0;
@ -237,15 +238,21 @@ fhandler_socket::dup (fhandler_base *child)
return fhandler_base::dup (child);
}
int __stdcall
fhandler_socket::fstat (struct stat *buf, path_conv *pc)
{
fhandler_disk_file fh;
fh.set_name (get_name (), get_win32_name ());
return fh.fstat (buf, pc);
}
int
fhandler_socket::read (void *ptr, size_t len)
{
sigframe thisframe (mainthread);
int res = recv (get_socket (), (char *) ptr, len, 0);
if (res == SOCKET_ERROR)
{
set_winsock_errno ();
}
set_winsock_errno ();
return res;
}
@ -414,7 +421,7 @@ fhandler_socket::ioctl (unsigned int cmd, void *p)
if (cmd == FIONBIO)
{
syscall_printf ("socket is now %sblocking",
*(int *) p ? "un" : "");
*(int *) p ? "non" : "");
/* Start AsyncSelect if async socket unblocked */
if (*(int *) p && get_async ())
WSAAsyncSelect (get_socket (), gethwnd (), WM_ASYNCIO, ASYNC_MASK);
@ -460,11 +467,8 @@ fhandler_socket::fcntl (int cmd, void *arg)
void
fhandler_socket::set_close_on_exec (int val)
{
#if 0
extern WSADATA wsadata;
if (wsadata.wVersion < 512) /* < Winsock 2.0 */
if (!winsock2_active) /* < Winsock 2.0 */
set_inheritance (get_handle (), val);
#endif
set_close_on_exec_flag (val);
debug_printf ("set close_on_exec for %s to %d", get_name (), val);
}

View File

@ -55,7 +55,8 @@ fhandler_dev_tape::is_eof (int win_error)
return ret;
}
fhandler_dev_tape::fhandler_dev_tape (const char *name, int unit) : fhandler_dev_raw (FH_TAPE, name, unit)
fhandler_dev_tape::fhandler_dev_tape (int unit)
: fhandler_dev_raw (FH_TAPE, unit)
{
set_cb (sizeof *this);
}

View File

@ -35,8 +35,8 @@ static DWORD WINAPI process_input (void *); // Input queue thread
static DWORD WINAPI process_output (void *); // Output queue thread
static DWORD WINAPI process_ioctl (void *); // Ioctl requests thread
fhandler_tty_master::fhandler_tty_master (const char *name, int unit) :
fhandler_pty_master (name, FH_TTYM, unit)
fhandler_tty_master::fhandler_tty_master (int unit) :
fhandler_pty_master (FH_TTYM, unit)
{
set_cb (sizeof *this);
console = NULL;
@ -437,8 +437,8 @@ process_ioctl (void *)
/**********************************************************************/
/* Tty slave stuff */
fhandler_tty_slave::fhandler_tty_slave (int num, const char *name) :
fhandler_tty_common (FH_TTYS, name, num)
fhandler_tty_slave::fhandler_tty_slave (int num)
: fhandler_tty_common (FH_TTYS, num)
{
set_cb (sizeof *this);
ttynum = num;
@ -446,8 +446,8 @@ fhandler_tty_slave::fhandler_tty_slave (int num, const char *name) :
inuse = NULL;
}
fhandler_tty_slave::fhandler_tty_slave (const char *name) :
fhandler_tty_common (FH_TTYS, name, 0)
fhandler_tty_slave::fhandler_tty_slave ()
: fhandler_tty_common (FH_TTYS, 0)
{
set_cb (sizeof *this);
inuse = NULL;
@ -950,8 +950,8 @@ out:
/*******************************************************
fhandler_pty_master
*/
fhandler_pty_master::fhandler_pty_master (const char *name, DWORD devtype, int unit) :
fhandler_tty_common (devtype, name, unit)
fhandler_pty_master::fhandler_pty_master (DWORD devtype, int unit)
: fhandler_tty_common (devtype, unit)
{
set_cb (sizeof *this);
ioctl_request_event = NULL;

View File

@ -46,8 +46,8 @@ The following unix-style calls are supported:
select () call marks read fd when any message posted to queue.
*/
fhandler_windows::fhandler_windows (const char *name) :
fhandler_base (FH_WINDOWS, name)
fhandler_windows::fhandler_windows ()
: fhandler_base (FH_WINDOWS)
{
set_cb (sizeof *this);
hWnd_ = NULL;

View File

@ -15,8 +15,8 @@ details. */
#include "security.h"
#include "fhandler.h"
fhandler_dev_zero::fhandler_dev_zero (const char *name)
: fhandler_base (FH_ZERO, name)
fhandler_dev_zero::fhandler_dev_zero ()
: fhandler_base (FH_ZERO)
{
set_cb (sizeof *this);
}

View File

@ -217,7 +217,7 @@ mmap_record::fixup_map ()
&old_prot);
}
static fhandler_disk_file fh_paging_file (NULL);
static fhandler_disk_file fh_paging_file;
fhandler_base *
mmap_record::alloc_fh ()

View File

@ -506,12 +506,15 @@ cygwin_getprotobynumber (int number)
fhandler_socket *
fdsock (int fd, const char *name, SOCKET soc)
{
SetResourceLock (LOCK_FD_LIST, WRITE_LOCK | READ_LOCK, "fdsock");
if (wsadata.wVersion < 512) /* < Winsock 2.0 */
soc = set_socket_inheritance (soc);
fhandler_socket *fh = (fhandler_socket *) cygheap->fdtab.build_fhandler (fd, FH_SOCKET, name);
fh->set_io_handle ((HANDLE) soc);
fh->set_flags (O_RDWR);
cygheap->fdtab.inc_need_fixup_before ();
fh->set_name (name, name);
ReleaseResourceLock (LOCK_FD_LIST, WRITE_LOCK | READ_LOCK, "fdsock");
return fh;
}

View File

@ -701,6 +701,10 @@ out:
set_has_buggy_open (strcmp (fs_name, "SUNWNFS") == 0);
}
}
#if 0
if (issocket ())
devn = FH_SOCKET;
#endif
if (!(opt & PC_FULL))
{

View File

@ -293,8 +293,8 @@ winpids::add (DWORD& nelem, bool winpid, DWORD pid)
if (nelem >= npidlist)
{
npidlist += slop_pidlist;
pidlist = (DWORD *) realloc (pidlist, size_pidlist (npidlist));
pinfolist = (pinfo *) realloc (pinfolist, size_pinfolist (npidlist));
pidlist = (DWORD *) realloc (pidlist, size_pidlist (npidlist + 1));
pinfolist = (pinfo *) realloc (pinfolist, size_pinfolist (npidlist + 1));
}
pinfolist[nelem].init (cygpid, PID_NOREDIR);
@ -324,7 +324,7 @@ winpids::enumNT (bool winpid)
DWORD nelem = 0;
if (!szprocs)
procs = (SYSTEM_PROCESSES *) malloc (szprocs = 200 * sizeof (*procs));
procs = (SYSTEM_PROCESSES *) malloc (sizeof (*procs) + (szprocs = 200 * sizeof (*procs)));
NTSTATUS res;
for (;;)
@ -387,7 +387,8 @@ void
winpids::init (bool winpid)
{
npids = (this->*enum_processes) (winpid);
pidlist[npids] = 0;
if (pidlist)
pidlist[npids] = 0;
}
DWORD

View File

@ -25,9 +25,8 @@ details. */
static unsigned pipecount;
static const NO_COPY char pipeid_fmt[] = "stupid_pipe.%u.%u";
fhandler_pipe::fhandler_pipe (const char *name, DWORD devtype) :
fhandler_base (devtype, name),
guard (0), writepipe_exists(0), orig_pid (0), id (0)
fhandler_pipe::fhandler_pipe (DWORD devtype)
: fhandler_base (devtype), guard (0), writepipe_exists(0), orig_pid (0), id (0)
{
set_cb (sizeof *this);
}

View File

@ -265,4 +265,8 @@ extern bool cygwin_testing;
extern unsigned _cygwin_testing_magic;
extern HMODULE cygwin_hmodule;
#define winsock2_active (wsadata.wVersion >= 512)
#define winsock_active (wsadata.wVersion < 512)
extern struct WSAData wsadata;
#endif /* defined __cplusplus */