#1338 fconfigure -encoding binary -translation binary doesn't work

obsolete: 8.3.1
closed-invalid
nobody
5
2001-04-19
2000-10-26
Anonymous
No

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.

Discussion

  • Donal K. Fellows

    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.

     
  • Brent B. Welch

    Brent B. Welch - 2000-11-15
    • status: open --> closed-invalid
     
  • Brent B. Welch

    Brent B. Welch - 2000-11-15

    -binary is a synonm for {lf lf}
    In the user's first case, they were probably executing an old shell off their path.

     
  • Don Porter

    Don Porter - 2001-04-19
    • labels: 104246 --> 24. Channel Commands