Mercurial > hg > xemacs-beta
diff src/file-coding.c @ 802:19dfb459d51a
[xemacs-hg @ 2002-04-03 10:47:37 by ben]
fix tty problem et al
internals/internals.texi: Add section on correctly merging a branch back into the trunk.
console-tty.c, eval.c, event-unixoid.c, file-coding.c, file-coding.h, lisp.h, print.c, sysdep.c: Fix data corruption error in print.c from print_depth becoming
negative. Borrow primitives internal_bind_int,
internal_bind_lisp_object from my stderr-proc ws, soon to be
integrated; use them to properly bind print_depth et al.
First fix for TTY problem. The basic problem is I switched things
so that the TTY I/O is filtered through a coding system, for the
support of kterm and such, that speak JIS or similar
encodings. (#### I ***swear*** I had this working way back in
19.12.) Anyway, this introduced buffering issues, in which instead
of one char being read, it tried to read 1024 chars. I tried
setting the stdin descriptor non-blocking, but it doesn't appear
to work on Cygwin. (#### Andy, do you know anything about this?)
So I fixed it elsewhere. If you get weirdness on the TTY, look in
console-tty.c and see how it gets the coding system; maybe there's
a way to change it (and if not, there should be!).
Also fix warning in sysdep.c.
author | ben |
---|---|
date | Wed, 03 Apr 2002 10:47:52 +0000 |
parents | 2b676dc88c66 |
children | a634e3b7acc8 |
line wrap: on
line diff
--- a/src/file-coding.c Mon Apr 01 03:59:04 2002 +0000 +++ b/src/file-coding.c Wed Apr 03 10:47:52 2002 +0000 @@ -2037,7 +2037,7 @@ and when we get 0, keep taking more data until we don't get 0 -- we don't know how much data the conversion routine might need before it can generate any data of its own */ - Bytecount readmore = max (size, 1024); + Bytecount readmore = max (size, str->one_byte_at_a_time ? 1 : 1024); Dynarr_add_many (str->convert_from, 0, readmore); read_size = Lstream_read (str->other_end, @@ -2305,7 +2305,7 @@ static Lisp_Object make_coding_stream_1 (Lstream *stream, Lisp_Object codesys, const char *mode, enum encode_decode direction, - int no_close_other) + int flags) { Lstream *lstr = Lstream_new (lstream_coding, mode); struct coding_stream *str = CODING_STREAM_DATA (lstr); @@ -2319,29 +2319,33 @@ str->convert_to = Dynarr_new (unsigned_char); str->convert_from = Dynarr_new (unsigned_char); str->direction = direction; - str->no_close_other = no_close_other; + if (flags & CODE_FL_NO_CLOSE_OTHER) + str->no_close_other = 1; + else if (flags & CODE_FL_READ_ONE_BYTE_AT_A_TIME) + str->one_byte_at_a_time = 1; + set_coding_stream_coding_system (lstr, codesys); return wrap_lstream (lstr); } -/* If NO_CLOSE_OTHER is non-zero, don't close STREAM (the stream at the - other end) when this stream is closed. */ +/* FLAGS -- #### document me. If NO_CLOSE_OTHER is non-zero, don't close + STREAM (the stream at the other end) when this stream is closed. */ Lisp_Object make_coding_input_stream (Lstream *stream, Lisp_Object codesys, - enum encode_decode direction, int no_close_other) + enum encode_decode direction, int flags) { return make_coding_stream_1 (stream, codesys, "r", direction, - no_close_other); + flags); } -/* If NO_CLOSE_OTHER is non-zero, don't close STREAM (the stream at the - other end) when this stream is closed. */ +/* FLAGS -- #### document me. If NO_CLOSE_OTHER is non-zero, don't close + STREAM (the stream at the other end) when this stream is closed. */ Lisp_Object make_coding_output_stream (Lstream *stream, Lisp_Object codesys, - enum encode_decode direction, int no_close_other) + enum encode_decode direction, int flags) { return make_coding_stream_1 (stream, codesys, "w", direction, - no_close_other); + flags); } static Lisp_Object @@ -4147,7 +4151,7 @@ Lisp_Object binary_instream = make_coding_input_stream (XLSTREAM (stream), Qbinary, - CODING_ENCODE, 1); + CODING_ENCODE, CODE_FL_NO_CLOSE_OTHER); Lisp_Object decstream = make_coding_input_stream (XLSTREAM (binary_instream),