[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r117861: * charset.c (Fget_unused_iso_final_char): F
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] trunk r117861: * charset.c (Fget_unused_iso_final_char): Fix subscript error. |
Date: |
Thu, 11 Sep 2014 00:30:09 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 117861
revision-id: address@hidden
parent: address@hidden
author: Paul Eggert <address@hidden>
committer: Paul Eggert <address@hidden>
branch nick: trunk
timestamp: Wed 2014-09-10 17:29:54 -0700
message:
* charset.c (Fget_unused_iso_final_char): Fix subscript error.
Use check_iso_charset_parameter instead of doing the checks by hand.
(check_iso_charset_parameter): Move up. Check parameters a bit
more carefully, and return true for 96-char sets. All callers changed.
modified:
src/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1438
src/charset.c charset.c-20091113204419-o5vbwnq5f7feedwu-1075
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2014-09-10 20:56:05 +0000
+++ b/src/ChangeLog 2014-09-11 00:29:54 +0000
@@ -1,3 +1,10 @@
+2014-09-10 Paul Eggert <address@hidden>
+
+ * charset.c (Fget_unused_iso_final_char): Fix subscript error.
+ Use check_iso_charset_parameter instead of doing the checks by hand.
+ (check_iso_charset_parameter): Move up. Check parameters a bit
+ more carefully, and return true for 96-char sets. All callers changed.
+
2014-09-10 Paul Eggert <address@hidden>
Simplify lisp.h by removing the __COUNTER__ business.
=== modified file 'src/charset.c'
--- a/src/charset.c 2014-09-01 16:05:43 +0000
+++ b/src/charset.c 2014-09-11 00:29:54 +0000
@@ -1400,6 +1400,32 @@
return Qnil;
}
+/* Check that DIMENSION, CHARS, and FINAL_CHAR specify a valid ISO charset.
+ Return true if it's a 96-character set, false if 94. */
+
+static bool
+check_iso_charset_parameter (Lisp_Object dimension, Lisp_Object chars,
+ Lisp_Object final_char)
+{
+ CHECK_NUMBER (dimension);
+ CHECK_NUMBER (chars);
+ CHECK_CHARACTER (final_char);
+
+ if (! (1 <= XINT (dimension) && XINT (dimension) <= 3))
+ error ("Invalid DIMENSION %"pI"d, it should be 1, 2, or 3",
+ XINT (dimension));
+
+ bool chars_flag = XINT (chars) == 96;
+ if (! (chars_flag || XINT (chars) == 94))
+ error ("Invalid CHARS %"pI"d, it should be 94 or 96", XINT (chars));
+
+ int final_ch = XFASTINT (final_char);
+ if (! ('0' <= final_ch && final_ch <= '~'))
+ error ("Invalid FINAL-CHAR '%c', it should be '0'..'~'", final_ch);
+
+ return chars_flag;
+}
+
DEFUN ("get-unused-iso-final-char", Fget_unused_iso_final_char,
Sget_unused_iso_final_char, 2, 2, 0,
doc: /*
@@ -1412,35 +1438,12 @@
return nil. */)
(Lisp_Object dimension, Lisp_Object chars)
{
- int final_char;
-
- CHECK_NUMBER (dimension);
- CHECK_NUMBER (chars);
- if (XINT (dimension) != 1 && XINT (dimension) != 2 && XINT (dimension) != 3)
- args_out_of_range_3 (dimension, make_number (1), make_number (3));
- if (XINT (chars) != 94 && XINT (chars) != 96)
- args_out_of_range_3 (chars, make_number (94), make_number (96));
- for (final_char = '0'; final_char <= '?'; final_char++)
- if (ISO_CHARSET_TABLE (XINT (dimension), XINT (chars), final_char) < 0)
- break;
- return (final_char <= '?' ? make_number (final_char) : Qnil);
-}
-
-static void
-check_iso_charset_parameter (Lisp_Object dimension, Lisp_Object chars,
Lisp_Object final_char)
-{
- CHECK_NATNUM (dimension);
- CHECK_NATNUM (chars);
- CHECK_CHARACTER (final_char);
-
- if (XINT (dimension) > 3)
- error ("Invalid DIMENSION %"pI"d, it should be 1, 2, or 3",
- XINT (dimension));
- if (XINT (chars) != 94 && XINT (chars) != 96)
- error ("Invalid CHARS %"pI"d, it should be 94 or 96", XINT (chars));
- if (XINT (final_char) < '0' || XINT (final_char) > '~')
- error ("Invalid FINAL-CHAR %c, it should be `0'..`~'",
- (int)XINT (final_char));
+ bool chars_flag = check_iso_charset_parameter (dimension, chars,
+ make_number ('0'));
+ for (int final_char = '0'; final_char <= '?'; final_char++)
+ if (ISO_CHARSET_TABLE (XINT (dimension), chars_flag, final_char) < 0)
+ return make_number (final_char);
+ return Qnil;
}
@@ -1454,12 +1457,10 @@
(Lisp_Object dimension, Lisp_Object chars, Lisp_Object final_char,
Lisp_Object charset)
{
int id;
- bool chars_flag;
CHECK_CHARSET_GET_ID (charset, id);
- check_iso_charset_parameter (dimension, chars, final_char);
- chars_flag = XINT (chars) == 96;
- ISO_CHARSET_TABLE (XINT (dimension), chars_flag, XINT (final_char)) = id;
+ bool chars_flag = check_iso_charset_parameter (dimension, chars, final_char);
+ ISO_CHARSET_TABLE (XINT (dimension), chars_flag, XFASTINT (final_char)) = id;
return Qnil;
}
@@ -2113,13 +2114,9 @@
DIMENSION, CHARS, and FINAL-CHAR. */)
(Lisp_Object dimension, Lisp_Object chars, Lisp_Object final_char)
{
- int id;
- bool chars_flag;
-
- check_iso_charset_parameter (dimension, chars, final_char);
- chars_flag = XFASTINT (chars) == 96;
- id = ISO_CHARSET_TABLE (XFASTINT (dimension), chars_flag,
- XFASTINT (final_char));
+ bool chars_flag = check_iso_charset_parameter (dimension, chars, final_char);
+ int id = ISO_CHARSET_TABLE (XINT (dimension), chars_flag,
+ XFASTINT (final_char));
return (id >= 0 ? CHARSET_NAME (CHARSET_FROM_ID (id)) : Qnil);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r117861: * charset.c (Fget_unused_iso_final_char): Fix subscript error.,
Paul Eggert <=