diff options
| author | dgp@users.sourceforge.net <dgp> | 2014-01-24 21:52:59 (GMT) |
|---|---|---|
| committer | dgp@users.sourceforge.net <dgp> | 2014-01-24 21:52:59 (GMT) |
| commit | c1303d0e3862c1c66b7b7b7861c0562b52e86dff (patch) | |
| tree | 6bac5a408e8e530934fa88f506f2003b61a03a6d /generic/tclIO.c | |
| parent | f0ea3870f02d9739dbfd2542e29cc62d96b9bea0 (diff) | |
| parent | 94cd6ec9a73e48c570d021ee740c26ed12d520c9 (diff) | |
| download | tcl-c1303d0e3862c1c66b7b7b7861c0562b52e86dff.zip tcl-c1303d0e3862c1c66b7b7b7861c0562b52e86dff.tar.gz tcl-c1303d0e3862c1c66b7b7b7861c0562b52e86dff.tar.bz2 | |
In WriteChars(), eliminate the copy step through a staging buffer when it
is not required for channel translation.
Diffstat (limited to 'generic/tclIO.c')
| -rw-r--r-- | generic/tclIO.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c index f1d85bf..321f485 100644 --- a/generic/tclIO.c +++ b/generic/tclIO.c @@ -4198,16 +4198,17 @@ WriteChars( consumedSomething = 1; while (consumedSomething && (srcLen + savedLF + endEncoding > 0)) { consumedSomething = 0; - stage = statePtr->outputStage; - stageMax = statePtr->bufSize; - stageLen = stageMax; - - toWrite = stageLen; - if (toWrite > srcLen) { - toWrite = srcLen; - } if (translate) { + stage = statePtr->outputStage; + stageMax = statePtr->bufSize; + stageLen = stageMax; + + toWrite = stageLen; + if (toWrite > srcLen) { + toWrite = srcLen; + } + if (savedLF) { /* * A '\n' was left over from last call to TranslateOutputEOL() @@ -4234,8 +4235,9 @@ WriteChars( stageLen = stageMax; } } else { - memcpy(stage, src, toWrite); - stageLen = toWrite; + stage = (char *) src; + stageLen = srcLen; + toWrite = stageLen; } src += toWrite; srcLen -= toWrite; |
