OriginalBugID: 5936 Bug
Version: 8.3.1
SubmitDate: '2000-06-22'
LastModified: '2000-10-25'
Severity: SER
Status: UnAssn
Submitter: techsupp
OS: Solaris
OSVersion: solaris 2.6
Machine: ultra 1
FixedDate: '2000-10-25'
ClosedDate: '2000-10-25'
Name:
P Vetter
ReproducibleScript:
Two problems: first one causes failure.
#!/bin/sh
# The backslash makes the next line a comment in Tcl exec wish "$0" ${1+"$@"}
# Client socket - to - stdout converter
# This version quits at received "Q".
# change values in next 2 lines as appropriate
set serveraddr 255.255.255.255
set serverport 8081
set s [socket $serveraddr $serverport]
fconfigure $s -buffering none -encoding binary -translation binary
fconfigure stdin -buffering none -encoding binary -translation binary
fconfigure stdout -buffering none -encoding binary -translation binary
set inchar ""
set flag [eof $s]
clear
while {($flag == 0) && ("$inchar" != "Q") } {
set inchar [read $s 1]
puts -nonewline $inchar
set flag [eof $s]
}
tcl>cli
Error in startup script: bad option "-encoding": should be one of -blocking, -buffering, -buffersize, -eofchar, or -translation
while executing
"fconfigure $s -buffering none -encoding binary -translation binary"
(file "cli" line 13)
Problem 2: "fconfigure -translation binary" status reported inconsistently; Documentation hints at this but only makes sense after wasted effort. The common man is impressed that "-translation binary" flag doesn't stick like all the others. Recommend consistent status info *or* a sentence or two in the man page.
% fconfigure $s
-blocking 1 -buffering none -buffersize 4096 -encoding binary -eofchar {{} {}} -translation {lf lf} -peername {255.255.255.255 porter 8081} -sockname {255.255.255.255 porter 55975}
% fconfigure $s -translation binary
% fconfigure $s
-blocking 1 -buffering none -buffersize 4096 -encoding binary -eofchar {{} {}} -translation {lf lf} -peername {255.255.255.255 porter 8081} -sockname {255.255.255.255 porter 55975}
%
ObservedBehavior:
Problem 1: wish rejects a documented option.
Strangely no error message given in interactive mode, only when executed as a shell script.
Problem 2: It *appears* that the configuration change hasn't stuck.
DesiredBehavior:
Problem 1: no complaints, or else one that explains why the documented option is not accepted in this case.
Problem 2:
% fconfigure $s
-blocking 1 -buffering none -buffersize 4096 -encoding binary -eofchar {{} {}} -translation {lf lf} -peername etc....
% fconfigure $s -translation binary
% fconfigure $s
-blocking 1 -buffering none -buffersize 4096 -encoding binary -eofchar {{} {}} -translation BINARY -peername etc...
%
OR some indication in the man page that -translation option is reported inconsistently.
The first problem just sounds like you're picking up an old (8.0.*?) version of Tcl which didn't support -encoding. It is easily done... :^)
I've hit the second problem before. Jeff claimed that it made no difference whether the translation was binary or lf (so long as the encoding was binary) but I remain deeply unconvinced.
-binary is a synonm for {lf lf}
In the user's first case, they were probably executing an old shell off their path.