diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-02-28 13:13:07 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-02-28 13:13:07 (GMT) |
commit | 57b1d9531c5dc0a0a8c5d8055b2bf09f9e966842 (patch) | |
tree | c1596b2a81451327a24c73124de842f3a471cf16 /win/tclWinSerial.c | |
parent | 52e543c5691a60c3ef802fecf1ae08e7efcf19b7 (diff) | |
parent | e7306ac7d85c1452e8d096c1b5f3cf5a2d7b5efb (diff) | |
download | tcl-57b1d9531c5dc0a0a8c5d8055b2bf09f9e966842.zip tcl-57b1d9531c5dc0a0a8c5d8055b2bf09f9e966842.tar.gz tcl-57b1d9531c5dc0a0a8c5d8055b2bf09f9e966842.tar.bz2 |
Implement TIP #562: Deprecate channel types 1-4
Diffstat (limited to 'win/tclWinSerial.c')
-rw-r--r-- | win/tclWinSerial.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/win/tclWinSerial.c b/win/tclWinSerial.c index a63fd8e..7884453 100644 --- a/win/tclWinSerial.c +++ b/win/tclWinSerial.c @@ -168,7 +168,7 @@ static COMMTIMEOUTS no_timeout = { static int SerialBlockProc(ClientData instanceData, int mode); static void SerialCheckProc(ClientData clientData, int flags); static int SerialCloseProc(ClientData instanceData, - Tcl_Interp *interp); + Tcl_Interp *interp, int flags); static int SerialEventProc(Tcl_Event *evPtr, int flags); static void SerialExitHandler(ClientData clientData); static int SerialGetHandleProc(ClientData instanceData, @@ -204,7 +204,7 @@ static int SerialBlockingWrite(SerialInfo *infoPtr, LPVOID buf, static const Tcl_ChannelType serialChannelType = { "serial", /* Type name. */ TCL_CHANNEL_VERSION_5, /* v5 channel */ - SerialCloseProc, /* Close proc. */ + TCL_CLOSE2PROC, /* Close proc. */ SerialInputProc, /* Input proc. */ SerialOutputProc, /* Output proc. */ NULL, /* Seek proc. */ @@ -212,7 +212,7 @@ static const Tcl_ChannelType serialChannelType = { SerialGetOptionProc, /* Get option proc. */ SerialWatchProc, /* Set up notifier to watch the channel. */ SerialGetHandleProc, /* Get an OS handle from channel. */ - NULL, /* close2proc. */ + SerialCloseProc, /* close2proc. */ SerialBlockProc, /* Set blocking or non-blocking mode.*/ NULL, /* flush proc. */ NULL, /* handler proc. */ @@ -606,15 +606,19 @@ SerialBlockProc( static int SerialCloseProc( ClientData instanceData, /* Pointer to SerialInfo structure. */ - Tcl_Interp *dummy) /* For error reporting. */ + Tcl_Interp *dummy, /* For error reporting. */ + int flags) { SerialInfo *serialPtr = (SerialInfo *) instanceData; - int errorCode, result = 0; + int errorCode = 0, result = 0; SerialInfo *infoPtr, **nextPtrPtr; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); (void)dummy; - errorCode = 0; + if ((flags & (TCL_CLOSE_READ | TCL_CLOSE_WRITE)) != 0) { + return EINVAL; + } + if (serialPtr->validMask & TCL_READABLE) { PurgeComm(serialPtr->handle, PURGE_RXABORT | PURGE_RXCLEAR); |