# HG changeset patch # User Richard M. Stallman # Date 890119554 0 # Node ID ea520c42a34274874a609b30911c0da9e1668ec8 # Parent 7da9a3e9d3c8d1816761577ba3a31ce0e9cb6c9e (Fchar_after, Fchar_before): Properly check arg type and whether in range, for all cases. (Fsave_excursion): Doc fix. diff -r 7da9a3e9d3c8 -r ea520c42a342 src/editfns.c --- a/src/editfns.c Tue Mar 17 06:49:26 1998 +0000 +++ b/src/editfns.c Tue Mar 17 07:25:54 1998 +0000 @@ -380,7 +380,12 @@ Executes BODY just like `progn'.\n\ The values of point, mark and the current buffer are restored\n\ even in case of abnormal exit (throw or error).\n\ -The state of activation of the mark is also restored.") +The state of activation of the mark is also restored.\n\ +\n\ +This construct does not save `deactivate-mark', and therefore\n\ +functions that change the buffer will still cause deactivation\n\ +of the mark at the end of the command. To prevent that, bind\n\ +`deactivate-mark' with `let'.") (args) Lisp_Object args; { @@ -555,20 +560,22 @@ register Lisp_Object val; if (NILP (pos)) - return make_number (FETCH_CHAR (PT_BYTE)); - - if (MARKERP (pos)) - pos_byte = marker_byte_position (pos); + pos_byte = PT_BYTE; + else if (MARKERP (pos)) + { + pos_byte = marker_byte_position (pos); + if (pos_byte < BEGV_BYTE || pos_byte >= ZV_BYTE) + return Qnil; + } else { CHECK_NUMBER_COERCE_MARKER (pos, 0); + if (pos < BEGV || pos >= ZV) + return Qnil; pos_byte = CHAR_TO_BYTE (XINT (pos)); } - if (pos_byte < BEGV_BYTE || pos_byte >= ZV_BYTE) - return Qnil; - return make_number (FETCH_CHAR (pos_byte)); } @@ -588,13 +595,19 @@ if (NILP (pos)) pos_byte = PT_BYTE; else if (MARKERP (pos)) - pos_byte = marker_byte_position (pos); - else if (pos <= BEGV || pos > ZV) - return Qnil; + { + pos_byte = marker_byte_position (pos); + + if (pos_byte <= BEGV_BYTE || pos_byte > ZV_BYTE) + return Qnil; + } else { CHECK_NUMBER_COERCE_MARKER (pos, 0); + if (pos <= BEGV || pos > ZV) + return Qnil; + pos_byte = CHAR_TO_BYTE (XINT (pos)); }