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:
parent
91033e3716
commit
4af53f973a
2 changed files with 32 additions and 3 deletions
|
@ -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.
|
||||
|
|
|
@ -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";
|
||||
|
|
Loading…
Reference in a new issue