Coding bug in insert-file-contents-internal

Nix nix at esperi.org.uk
Fri Feb 4 06:08:22 EST 2005


On Fri, 04 Feb 2005, Stephen J. Turnbull wrote:
>>>>>> "nix" == nix  <nix at esperi.org.uk> writes:
> 
>     nix> I'm afraid I've suffered multiple hardware failures and
>     nix> near-crippling RSI over the last year plus, which has pretty
>     nix> much killed my ability to develop *anything* :(
> 
> I am very sorry to hear that.  While I'm glad to hear you're healing,
> you might want to look at Ben's page at www.666.com, and Ben might
> have some advice on configuring XEmacs advantageously.

I have. It's excellent... but the single largest RSI-saver (voice
recognition) doesn't work well when you enunciate as poorly and variably
as I do. So a Maltron keyboard it is, and now, after only a few weeks, I
can't imagine why these keyboards aren't in use *everywhere*.  They whip
the flat pasty white rear of QWERTY keyboards. :)

(My RSI wasn't as bad as Ben's, which sounds (reads?) truly horrific. It
was partially Ben's cautionary example which led me to ease off as hard
as I did, and may well have saved my hands. Thanks, Ben!)

>     nix> The only solution I can think of is to locally bind the
>     nix> codesys argument to `coding-system-for-read' inside
> 
> Ah, OK, put that way I remember this vaguely.  Maybe you did report
> it, or it came up in another context.

Maybe. I'm behind a superfascist corporate firewall right now which
blocks xemacs.org, so I can't check the archives.

>     nix> Finsert_file_contents_internal: would that be acceptable? If
>     nix> it is, I can spin a patch in the next day or so.
> 
> I don't know if it would be acceptable; I'll need to make time to look
> at this and I also want a second opinion from "Dr." Wing.  I would

Please! The last thing I want to do is cause a repeat of the
XEmacs-21.4.8 fiasco.

> appreciate having a patch to look at without promising application,
> but that's up to you.

Will do...

This is a completely tentative patch, bceause I'm still not quite clear
on the interactions of bindings, GCPRO, unwind-protect and the like in
the C layer. I *think* it's pointless to specbind() DEFVAR_LISPed
variables, because it seems to me that this would break the magic link
between the C variable and the Lisp symbol --- the magic forwarding
symbol would wind up on the specbinding stack --- and the C code uses
the variable...  so I've tried to record_unwind_protect it instead. I'm
not quite sure if I've done it right, or if I need to GCPRO something (I
don't think so: stuff on the specbinding stack and stuff in
DEFVAR_LISPed variables are both found by the garbage collector anyway,
right?)  record_unwind_protect()?)


It compiles, I don't know if it runs, I don't know if it's safe, I don't
know if there's a better way to do it:

2005-02-04  Nix  <nix at esperi.org.uk>

	* fileio.c (restore_read_coding_system_unwind): New function.
	(Finsert_file_contents_internal): Locally bind the read coding
	system around file-name-handler-alist calls.

Index: src/fileio.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/fileio.c,v
retrieving revision 1.66.2.6
diff -u -r1.66.2.6 fileio.c
--- src/fileio.c	2004/06/23 01:54:46	1.66.2.6
+++ src/fileio.c	2005/02/04 10:58:06
@@ -298,6 +298,17 @@
   return Fset_marker (point_marker, Qnil, Qnil);
 }
 
+#ifdef FILE_CODING
+/* Restore coding-system-for-read.  */
+
+static Lisp_Object
+restore_read_coding_system_unwind (Lisp_Object coding_system)
+{
+  Vcoding_system_for_read = coding_system;
+  return Qnil;
+}
+#endif
+
 /* Versions of read() and write() that allow quitting out of the actual
    I/O.  We don't use immediate_quit (i.e. direct longjmp() out of the
    signal handler) because that's way too losing.
@@ -2790,6 +2801,11 @@
 				   an unwind_protect */
 
   filename = Fexpand_file_name (filename, Qnil);
+
+#ifdef FILE_CODING
+  record_unwind_protect (restore_read_coding_system_unwind, Vcoding_system_for_read);
+  Vcoding_system_for_read = codesys;
+#endif
 
   /* If the file name has special constructs in it,
      call the corresponding file handler.  */

>     nix> --- Russ Allbery
> 
> anybody who quotes Russ can be forgiven almost anything!

OK, now *that* goes in my sig where Russ can see it. :)

-- 
`Blish is clearly in love with language. Unfortunately,
 language dislikes him intensely.' --- Russ Allbery




More information about the XEmacs-Beta mailing list