}
else
{
+ struct buffer *prev = current_buffer;
+
+ record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
+
CHECK_BUFFER (object, 0);
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, 0);
}
if (NILP (end))
- e = BUF_ZV (bp);
+ e = ZV;
else
{
CHECK_NUMBER_COERCE_MARKER (end, 1);
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))
{
/* Decide the coding-system to encode the data with.
}
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);