# HG changeset patch # User Kenichi Handa # Date 1074816703 0 # Node ID 206ba27238124f6fba25d8be49c09d65f241296e # Parent 6b1881ea9daf328a42d5689c0839bd9fb0ebb90e (Fmd5): If OBJECT is a buffer different from the current one, set buffer to OBJECT temporarily. diff -r 6b1881ea9daf -r 206ba2723812 src/fns.c --- a/src/fns.c Thu Jan 22 23:37:46 2004 +0000 +++ b/src/fns.c Fri Jan 23 00:11:43 2004 +0000 @@ -5454,12 +5454,18 @@ } 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 @@ } if (NILP (end)) - e = BUF_ZV (bp); + e = ZV; else { CHECK_NUMBER_COERCE_MARKER (end); @@ -5477,7 +5483,7 @@ 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 @@ } 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);