Allow use of mingw native on Windows 95 OS.

* src/gdb/ser-mingw.c (CancelIo): New macro for dynamically loaded
	DLL entry.
	(ser_windows_close): Only call CancelIo if function exists.
	(_initialize_ser_windows): Use LoadLirary/GetProcAddress
	to check for existence of CancelIo function in kernel32 DLL.
This commit is contained in:
Pierre Muller 2011-02-21 11:47:12 +00:00
parent 91033e3716
commit 4af53f973a
2 changed files with 32 additions and 3 deletions

View File

@ -1,3 +1,12 @@
2011-02-21 Pierre Muller <muller@ics.u-strasbg.fr>
Allow use of mingw native on Windows 95 OS.
* src/gdb/ser-mingw.c (CancelIo): New macro for dynamically loaded
DLL entry.
(ser_windows_close): Only call CancelIo if function exists.
(_initialize_ser_windows): Use LoadLirary/GetProcAddress
to check for existence of CancelIo function in kernel32 DLL.
2011-02-21 Hui Zhu <teawater@gmail.com>
* Makefile.in (HFILES_NO_SRCDIR): Add printcmd.h.

View File

@ -45,6 +45,11 @@ struct ser_windows_state
HANDLE except_event;
};
/* CancelIo is not available for Windows 95 OS, so we need to use
LoadLibrary/GetProcAddress to avoid a startup failure. */
#define CancelIo dyn_CancelIo
static BOOL WINAPI (*CancelIo) (HANDLE);
/* Open up a real live device for serial I/O. */
static int
@ -216,8 +221,12 @@ ser_windows_close (struct serial *scb)
{
struct ser_windows_state *state;
/* Stop any pending selects. */
CancelIo ((HANDLE) _get_osfhandle (scb->fd));
/* Stop any pending selects. On Windows 95 OS, CancelIo function does not
exist. In that case, it can be replaced by a call to CloseHandle, but
this is not necessary here as we do close the Windows handle by calling
close (scb->fd) below. */
if (CancelIo)
CancelIo ((HANDLE) _get_osfhandle (scb->fd));
state = scb->state;
CloseHandle (state->ov.hEvent);
CloseHandle (state->except_event);
@ -1208,8 +1217,19 @@ _initialize_ser_windows (void)
WSADATA wsa_data;
struct serial_ops *ops;
/* First register the serial port driver. */
HMODULE hm = NULL;
/* First find out if kernel32 exports CancelIo function. */
hm = LoadLibrary ("kernel32.dll");
if (hm)
{
CancelIo = (void *) GetProcAddress (hm, "CancelIo");
FreeLibrary (hm);
}
else
CancelIo = NULL;
/* Now register the serial port driver. */
ops = XMALLOC (struct serial_ops);
memset (ops, 0, sizeof (struct serial_ops));
ops->name = "hardwire";