Mercurial > emacs
changeset 21200:ea520c42a342
(Fchar_after, Fchar_before): Properly check arg type
and whether in range, for all cases.
(Fsave_excursion): Doc fix.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 17 Mar 1998 07:25:54 +0000 |
parents | 7da9a3e9d3c8 |
children | 425bf2edf1d4 |
files | src/editfns.c |
diffstat | 1 files changed, 24 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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)); }