Tcl Source Code

View Ticket
Login
Ticket UUID: 577093
Title: Tcl_(FS)OpenFileChannel and 'rb'
Type: RFE Version: None
Submitter: vincentdarley Created on: 2002-07-03 17:51:17
Subsystem: None Assigned To: dgp
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2005-04-28 02:03:05
Resolution: Accepted Closed By: dgp
    Closed on: 2005-04-27 19:03:05
Description:
The standard 'fopen()' C function allows the 
optional "b" mode specifier alongside "rwa+" to 
specify that the file to be opened is binary.

Tcl's Tcl_(FS)OpenFileChannel commands do not 
support "b" and throw an error if it is given.  It 
would be quite easy to parse out the "b" and do call 
Tcl_SetChannelOption(NULL, chan, "-
translation", "binary") after the channel is opened.

Should this be added to Tcl?

I don't know enough about generic channels in Tcl 
to know if it is possible for that action to fail or 
otherwise cause problems (bear in mind that, with 
VFS, the channel may not be a file, but could be a 
memchan, for example).
User Comments: dgp added on 2005-04-28 02:03:05:
Logged In: YES 
user_id=80530


Committed for Tcl 8.5a3

dgp added on 2005-04-28 01:41:15:

File Deleted - 131982: 



File Added - 131986: 577093.patch

dgp added on 2005-04-28 01:41:12:
Logged In: YES 
user_id=80530

correction.

dgp added on 2005-04-28 01:35:01:

File Deleted - 128021:

dgp added on 2005-04-28 01:34:59:

File Added - 131982: 577093.patch

dgp added on 2005-04-28 01:34:56:
Logged In: YES 
user_id=80530


Updated patch contains docs and tests.

vincentdarley added on 2005-04-01 15:55:52:
Logged In: YES 
user_id=32170

I haven't had time to test right now, but the patch itself
looks nice and clean.

It would be good to add a new test which writes some stuff
to a file in binary and then reads it back and check that \r
\n line endings have not been mangled.

dgp added on 2005-04-01 06:30:02:

File Added - 128021: 577093.patch

Logged In: YES 
user_id=80530

Turns out doing this at the
Tcl_FSOpenFileChannel() level
works fine, and spares the VFS
drivers from having to do anything.
Here's the patch.

dgp added on 2005-03-25 00:43:19:
Logged In: YES 
user_id=80530


Actually this is a bit different from
TIP 183, which proposes the change
only for [open].  That's simpler to do
than changing for Tcl_FSOpenFileChannel()
since the latter raises questions about
what changes each Tcl_Filesystem's
Tcl_FSOpenFileChannelProc might
have to handle in its "mode" argument.

dgp added on 2005-03-24 01:45:51:
Logged In: YES 
user_id=80530


This is TIP 183.

vincentdarley added on 2002-07-04 21:48:41:
Logged In: YES 
user_id=32170

The behaviour hasn't changed since 8.3, so I guess this 
is indeed a feature request.  One could even imagine a 
hookable mechanism in the future which allowed other 
(arbitrary) actions to be taken on open.  (Set 
the 'encoding' automatically might be nice, then 
perhaps 'source' could deal with unicode files).

andreas_kupries added on 2002-07-04 01:53:31:
Logged In: YES 
user_id=75003

What is the behaviour of 8.3 when using a "b" specifier ?
If it is the same I would consider this a feature request, and 
not a bug.

Attachments: