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>
|
2011-02-21 Hui Zhu <teawater@gmail.com>
|
||||||
|
|
||||||
* Makefile.in (HFILES_NO_SRCDIR): Add printcmd.h.
|
* Makefile.in (HFILES_NO_SRCDIR): Add printcmd.h.
|
||||||
|
|
|
@ -45,6 +45,11 @@ struct ser_windows_state
|
||||||
HANDLE except_event;
|
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. */
|
/* Open up a real live device for serial I/O. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -216,8 +221,12 @@ ser_windows_close (struct serial *scb)
|
||||||
{
|
{
|
||||||
struct ser_windows_state *state;
|
struct ser_windows_state *state;
|
||||||
|
|
||||||
/* Stop any pending selects. */
|
/* Stop any pending selects. On Windows 95 OS, CancelIo function does not
|
||||||
CancelIo ((HANDLE) _get_osfhandle (scb->fd));
|
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;
|
state = scb->state;
|
||||||
CloseHandle (state->ov.hEvent);
|
CloseHandle (state->ov.hEvent);
|
||||||
CloseHandle (state->except_event);
|
CloseHandle (state->except_event);
|
||||||
|
@ -1208,8 +1217,19 @@ _initialize_ser_windows (void)
|
||||||
WSADATA wsa_data;
|
WSADATA wsa_data;
|
||||||
struct serial_ops *ops;
|
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);
|
ops = XMALLOC (struct serial_ops);
|
||||||
memset (ops, 0, sizeof (struct serial_ops));
|
memset (ops, 0, sizeof (struct serial_ops));
|
||||||
ops->name = "hardwire";
|
ops->name = "hardwire";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue