From: Kenichi Handa Date: Fri, 23 Jan 2004 00:14:48 +0000 (+0000) Subject: (Fmd5): If OBJECT is a buffer different from the current X-Git-Tag: ttn-vms-21-2-B4~7848 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=fe905025d02b1bea377447bd1282f7fcd32f918e;p=emacs.git (Fmd5): If OBJECT is a buffer different from the current one, set buffer to OBJECT temporarily. --- diff --git a/src/ChangeLog b/src/ChangeLog index 3f6f23e1395..a15f25fbde8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2004-01-23 Kenichi Handa + + * fns.c (Fmd5): If OBJECT is a buffer different from the current + one, set buffer to OBJECT temporarily. + 2004-01-21 Stefan Monnier * keyboard.c (kbd_buffer_gcpro): Remove. diff --git a/src/fns.c b/src/fns.c index ff40c706edd..6383e09302b 100644 --- a/src/fns.c +++ b/src/fns.c @@ -5454,12 +5454,18 @@ guesswork fails. Normally, an error is signaled in such case. */) } else { + struct buffer *prev = current_buffer; + + record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); + CHECK_BUFFER (object); bp = XBUFFER (object); + if (bp != current_buffer) + set_buffer_internal (bp); if (NILP (start)) - b = BUF_BEGV (bp); + b = BEGV; else { CHECK_NUMBER_COERCE_MARKER (start); @@ -5467,7 +5473,7 @@ guesswork fails. Normally, an error is signaled in such case. */) } if (NILP (end)) - e = BUF_ZV (bp); + e = ZV; else { CHECK_NUMBER_COERCE_MARKER (end); @@ -5477,7 +5483,7 @@ guesswork fails. Normally, an error is signaled in such case. */) if (b > e) temp = b, b = e, e = temp; - if (!(BUF_BEGV (bp) <= b && e <= BUF_ZV (bp))) + if (!(BEGV <= b && e <= ZV)) args_out_of_range (start, end); if (NILP (coding_system)) @@ -5544,6 +5550,11 @@ guesswork fails. Normally, an error is signaled in such case. */) } object = make_buffer_string (b, e, 0); + if (prev != current_buffer) + set_buffer_internal (prev); + /* Discard the unwind protect for recovering the current + buffer. */ + specpdl_ptr--; if (STRING_MULTIBYTE (object)) object = code_convert_string1 (object, coding_system, Qnil, 1);