summaryrefslogtreecommitdiffstats
path: root/generic/tclIO.h
Commit message (Collapse)AuthorAgeFilesLines
* More internal use of size_t in stead of int, e.g. for epoch'sjan.nijtmans2017-02-151-1/+1
|
* [104f2885bb] Rework the "chan" Tcl_ObjType to properly validate cached ↵dgp2016-07-181-4/+2
|\ | | | | | | channel name lookups.
| * [104f2885bb] Rework the "chan" Tcl_ObjType to properly validate cacheddgp2016-07-181-4/+2
| | | | | | channel name lookups.
* | Align comment. Remove some end-of-line spacing. No functional changes.jan.nijtmans2015-09-281-1/+1
|\ \ | |/
| * align comment, no functional changejan.nijtmans2015-09-281-1/+1
| |
* | Member field which should not have been const, because it is dynamically ↵jan.nijtmans2015-06-231-1/+1
|\ \ | |/ | | | | allocated. Some end-of-line spacing in header files.
| * Member field which should not have been CONST, because it is dynamically ↵jan.nijtmans2015-06-231-1/+1
| | | | | | | | allocated
| * Backport the cheaper Preserve/Release on channels.dgp2014-08-011-0/+2
| |\ | |/ |/|
* | Reduce the cost of Preserve/Release on channelsdgp2014-07-301-0/+2
| |
* | Refinements of FlushChannel() and its callers. Notably includes removal of ↵dgp2014-05-291-5/+0
|\ \ | |/ | | | | the flag BUFFER_READY.
| * Further simplifications to FlushChannel(). This makes clear thedgp2014-05-281-5/+0
| | | | | | BUFFER_READY flag serves no necessary purpose, so it is removed.
| * merge 8.5dgp2014-04-211-0/+1
| |\
* | \ merge trunkdgp2014-04-211-0/+1
|\ \ \
| * \ \ Merge refcounting machinery for ChannelBuffer.dgp2014-04-211-0/+1
| |\ \ \ | | | |/ | | |/|
| | * | Added a refcounting mechanism to ChannelBuffers. Other edits todgp2014-04-211-0/+1
| | | | | | | | | | | | stop segfaults in tests iocmd-21.2[12].
* | | | Merge the checkins of the dgp-read-bytes branch onto the trunk, up todgp2014-03-231-26/+0
|\ \ \ \ | |/ / / |/| | / | | |/ | |/| | | | and including checkin a1e82fb63e . Do not merge checkin bae1c688f2 which starts to take the dgp-read-bytes branch into directions apparently unfriendly to stacked channels, which tests for [chan push] on the trunk help us to detect.
| * | Remove long dead "BAD_BLOCKING" support code so it no longer confusesdgp2014-03-171-23/+0
| | | | | | | | | people reading/editing this code.
| * | Remove old dead code; silence compiler warnings; tidy up.dgp2014-03-051-3/+0
| |/
* | Remove from tclIO.h structs used only in tclIO.c.dgp2013-02-261-108/+4
|\ \ | |/
| * structs *ChannelHandler* GetsState CopyState used only locally.dgp2013-02-261-108/+4
| |\ | | | | | | Remove from tclIO.h.
| | * structs ChannelHandler ChannelHandlerEvent GetsState CopyState used locally.dgp2013-02-261-83/+4
| | | | | | | | | Remove from tclIO.h.
| | * struct NextChannelHandler used only locally. Remove from tclIO.h.dgp2013-02-261-25/+0
| | |
* | | Repair linked list management in Tcl_DeleteCloseHandler().dgp2013-02-251-13/+4
|\ \ \ | |/ / | | | CloseCallback struct used only locally. Remove from tclIO.h.
| * | Repair linked list management in Tcl_DeleteCloseHandler().dgp2013-02-251-13/+4
| |\ \ | | |/ | | | CloseCallback struct used only locally. Remove from tclIO.h.
| | * Repair linked list management in Tcl_DeleteCloseHandler(). dgp2013-02-251-12/+4
| | | | | | | | | CloseCallback struct is used only locally. Remove from tclIO.h.
* | | Factor out constant that must be the same in multiple places. Prompted by adkf2012-05-251-0/+7
| | | | | | | | | conversation with Alexandre Ferrieux.
* | | Now that we're no longer using SCM based on RCS, the RCS Keyword linesdgp2011-03-021-2/+0
|\ \ \ | |/ / | | | cause more harm than good. Purged them (except in zlib files).
| * | Now that we're no longer using SCM based on RCS, the RCS Keyword lines causedgp2011-03-021-2/+0
| |\ \ | | |/ | | | more harm than good. Purged them.
| | * Now that we're no longer using SCM based on RCS, the RCS Keyword lines causedgp2011-03-011-2/+0
| | | | | | | | | more harm than good. Purged them.
| | * * tests/io.test (io-53.10): Testcase for bi-directionaly fcopy.andreas_kupries2008-04-071-2/+3
| | | | | | | | | | | | | | | | | | | | | * generic/tclIO.c: Additional changes to data structures for fcopy * generic/tclIO.h: and channels to perform proper cleanup in case of a channel having two background copy operations running as is now possible.
| | * * generic/tclIO.h (CHANNEL_INCLOSE): New flag. Set inandreas_kupries2004-07-151-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * generic/tclIO.c (Tcl_UnregisterChannel): 'Tcl_Close' while the * generic/tclIO.c (Tcl_Close): close callbacks are run. Checked in 'Tcl_Close' and 'Tcl_Unregister' to prevent recursive call of 'close' in the close-callbacks. This is a possible error made by implementors of virtual filesystems based on 'tclvfs', thinking that they have to close the channel in the close handler for the filesystem. * generic/tclIO.c: * generic/tclIO.h: * Not reverting, but #ifdef'ing the changes from May 19, 2004 out of the core. This removes the ***POTENTIAL INCOMPATIBILITY*** for channel drivers it introduced. This has become possible due to Expect gaining a BlockModeProc and now handling blockingg and non-blocking modes correctly. Thus [SF Tcl Bug 943274] is still fixed if a recent enough version of Expect is used. * doc/CrtChannel.3: Added warning about usage of a channel without a BlockModeProc.
| | * * tclIO.c: Fixed [SF Tcl Bug 943274]. This is the same problem asandreas_kupries2004-05-191-1/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * tclIO.h: [SF Tcl Bug 462317], see ChangeLog entry 2001-09-26. The fix done at that time is incomplete. It is possible to get around it if the actual read operation is defered and not executed in the event handler itself. Instead of tracking if we are in an read caused by a synthesized fileevent we now track if the OS has delivered a true event = actual data and bypass the driver if a read finds that there is no actual data waiting. The flag is cleared by a short or full read.
| * | * generic/tclIO.c (CopyData): Allow the total number of bytes copieddkf2010-03-201-2/+2
| | | | | | | | | | | | by [fcopy] to exceed 2GB. Can happen when no -size parameter given.
| * | * tests/io.test (io-53.10): Testcase for bi-directionaly fcopy.andreas_kupries2008-04-071-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | * tests/chanio.test: * generic/tclIO.c: Additional changes to data structures for fcopy * generic/tclIO.h: and channels to perform proper cleanup in case of a channel having two background copy operations running as is now possible.
* | | [Bug 3129448]: Possible over-allocation on 64-bit platforms, part 2nijtmans2010-12-101-4/+4
| | |
* | | Allow [fcopy] to move more than 2GB per call. Frederic Bonnet identified issue.dkf2010-03-201-3/+3
| | |
* | | [Bug 218977] Tcl_DbCkfree needs a return valuenijtmans2009-02-271-2/+2
| | | | | | | | | | | | don't use CONST84/CONST86 in internal header files
* | | * generic/tclIO.c (Tcl_CloseEx,CloseWrite,CloseChannelPart,ChanCloseHalf):andreas_kupries2008-12-181-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rewrite the half-close to properly flush the channel, like is done for a full close, going through FlushChannel, and using the flag BG_FLUSH_SCHEDULED (async flush during close). New functions CloseWrite, CloseChannelPart, new flag CHANNEL_CLOSEDWRITE. * tests/chanio.test (chanio-28.[67]): Reactivated these tests. Replaced tclsh -> [interpreter] to get correct executable for the pipe process, and added after cancel to kill the fail timers when we are done. Removed the explicits calls to [flush], now that [close] handles this correctly.
* | | * doc/ChnlStack.3: CONSTified the typePtr argumentnijtmans2008-10-041-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * doc/CrtChannel.3: of Tcl_CreateChannel and Tcl_StackChannel * generic/tcl.decls and the return value of Tcl_GetChannelType * generic/tcl.h * generic/tclIO.h * generic/tclIO.c * ChangeLog * generic/tclDecls.h: regenerated This change complies with TIP #27.
* | | More elimination of pre-C89-isms.dkf2008-05-021-2/+2
| | |
* | | * tests/io.test (io-53.10): Testcase for bi-directionaly fcopy.andreas_kupries2008-04-071-2/+3
|/ / | | | | | | | | | | | | | | * tests/chanio.test: * generic/tclIO.c: Additional changes to data structures for fcopy * generic/tclIO.h: and channels to perform proper cleanup in case of a channel having two background copy operations running as is now possible.
* | merge stable branch onto HEADdgp2007-12-131-1/+1
| |
* | * generic/tclIO.h: Create Tcl_Obj for Tcl channels to reducehobbs2007-12-051-1/+5
| | | | | | | | | | | | | | * generic/tclIO.c: overhead in lookup by Tcl_GetChannel. New * generic/tclIOCmd.c: TclGetChannelFromObj for internal use. * generic/tclIO.c (WriteBytes, WriteChars): add opt check to avoid EOL translation when not linebuffered or using lf. [Bug 1845092]
* | formattingdkf2005-10-131-182/+178
| |
* | TIP#219 IMPLEMENTATIONandreas_kupries2005-08-241-1/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * doc/SetChanErr.3: ** New File **. Documentation of the new channel API functions. * generic/tcl.decls: Stub declarations of the new channel API. * generic/tclDecls.h: Regenerated * generic/tclStubInit.c: * tclIORChan.c: ** New File **. Implementation of the reflected channel. * generic/tclInt.h: Integration of reflected channel and new error * generic/tclIO.c: propagation into the generic I/O core. * generic/tclIOCmd.c: * generic/tclIO.h: * library/init.tcl: * tests/io.test: Extended testsuite. * tests/ioCmd.test: * tests/chan.test: * generic/tclTest.c: * generic/tclThreadTest.c: * unix/Makefile.in: Integration into the build machinery. * win/Makefile.in: * win/Makefile.vc:
* | * generic/tclIO.h (CHANNEL_INCLOSE): New flag. Set inandreas_kupries2004-07-151-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * generic/tclIO.c (Tcl_UnregisterChannel): 'Tcl_Close' while the * generic/tclIO.c (Tcl_Close): close callbacks are run. Checked in 'Tcl_Close' and 'Tcl_Unregister' to prevent recursive call of 'close' in the close-callbacks. This is a possible error made by implementors of virtual filesystems based on 'tclvfs', thinking that they have to close the channel in the close handler for the filesystem. * generic/tclIO.c: * generic/tclIO.h: * Not reverting, but #ifdef'ing the changes from May 19, 2004 out of the core. This removes the ***POTENTIAL INCOMPATIBILITY*** for channel drivers it introduced. This has become possible due to Expect gaining a BlockModeProc and now handling blockingg and non-blocking modes correctly. Thus [SF Tcl Bug 943274] is still fixed if a recent enough version of Expect is used. * doc/CrtChannel.3: Added warning about usage of a channel without a BlockModeProc.
* | * tclIO.c: Fixed [SF Tcl Bug 943274]. This is the same problem asandreas_kupries2004-05-191-1/+17
|/ | | | | | | | | | | | | * tclIO.h: [SF Tcl Bug 462317], see ChangeLog entry 2001-09-26. The fix done at that time is incomplete. It is possible to get around it if the actual read operation is defered and not executed in the event handler itself. Instead of tracking if we are in an read caused by a synthesized fileevent we now track if the OS has delivered a true event = actual data and bypass the driver if a read finds that there is no actual data waiting. The flag is cleared by a short or full read.
* * Updated APIs in the file generic/tclIO.c according to the guidelinesdgp2002-01-151-4/+4
| | | | | | | | | | | of TIP 27. Several minor documentation corrections as well. * Updated channel driver interface according to the guidelines of TIP 27. See also [Bug 500348]. * Moved Tcl_EolTranslation enum declaration from generic/tcl.h to generic/tclInt.h (renamed to TclEolTranslation). It is not used anywhere in Tcl's public interface.
* * The changes below fix [Bug #462317] where Expect tried to readandreas_kupries2001-09-271-1/+12
| | | | | | | | | | | | | | | | | | | | | | | more than was in the buffers and then blocked in the OS call as its pty channel driver provides no blockmodeproc through which the OS could be notified of blocking-behaviour. Because of this the general I/O core has to take more care than usual to preserve the semantics of non-blocking channels. * generic/tclIO.c (Tcl_ReadRaw): Do not read from the driver if the channel is non-blocking and the fileevent causing the read was generated by a timer. We do not know if there is data available from the OS. Instead of going to the OS for more and potentially blocking we simply signal EWOULDBLOCK to the higher levels to cause the system to wait for true fileevents. (GetInput): Same as before. (ChannelTimerProc): Added set and clear of CHANNEL_TIMER_FEV. * generic/tclIO.h (CHANNEL_TIMER_FEV): New flag for channels. Is set if a fileevent was generated by a timer, the channel is not blocking and the driver did not provide a blockmodeproc. In that case the I/O core has to be especially careful about going to the driver for more data.
* 2001-03-30 Andreas Kupries <andreas_kupries@users.sourceforge.net>andreas_kupries2001-03-301-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * All of the changes below belong to TIP #10 [Tcl I/O Enhancement: Thread-Aware Channels]. See also [Patch #403358] at SF. * generic/tclIO.h (struct ChannelState, line 236f): Extended the structure with a new field of type 'Tcl_ThreadId' to hold the id of the thread currently managing all channels with this state. Note: This structure is shared by all channels in a stack of transformations. * generic/tclIO.c (Tcl_CreateChannel, lines 1058-1065): Modified to store the Id of the current thread in the 'ChannelState' of the new channel. * generic/tclIO.c (Tcl_SpliceChannel, lines 2265-2270): Modified in the same manner as 'Tcl_CreateChannel' as the channel will be managed by the current thread afterward. * generic/tclIO.c (Tcl_GetChannelThread, lines 1478-1503): * generic/tcl.decls (Tcl_GetChannelThread, lines 1504-1506): New API function to retrieve the Id of the managing thread from a channel. Implementation and declaration. * generic/tclTest.c (TestChannelCmd, lines 4520-4532): Added subcommand 'mthread' to query a channel about its managing thread.