summaryrefslogtreecommitdiffstats
path: root/generic/tclIO.c
diff options
context:
space:
mode:
authordgp@users.sourceforge.net <dgp>2014-01-24 21:52:59 (GMT)
committerdgp@users.sourceforge.net <dgp>2014-01-24 21:52:59 (GMT)
commitc1303d0e3862c1c66b7b7b7861c0562b52e86dff (patch)
tree6bac5a408e8e530934fa88f506f2003b61a03a6d /generic/tclIO.c
parentf0ea3870f02d9739dbfd2542e29cc62d96b9bea0 (diff)
parent94cd6ec9a73e48c570d021ee740c26ed12d520c9 (diff)
downloadtcl-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.c22
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;