HCoop
/
bpt
/
emacs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Check for overflow when converting integer to cons and back.
[bpt/emacs.git]
/
src
/
charset.c
diff --git
a/src/charset.c
b/src/charset.c
index
0af21b4
..
770e98c
100644
(file)
--- a/
src/charset.c
+++ b/
src/charset.c
@@
-932,17
+932,8
@@
usage: (define-charset-internal ...) */)
val = args[charset_arg_min_code];
if (! NILP (val))
{
val = args[charset_arg_min_code];
if (! NILP (val))
{
- unsigned code;
+ unsigned code
= cons_to_unsigned (val, UINT_MAX)
;
- if (INTEGERP (val))
- code = XINT (val);
- else
- {
- CHECK_CONS (val);
- CHECK_NUMBER_CAR (val);
- CHECK_NUMBER_CDR (val);
- code = (XINT (XCAR (val)) << 16) | (XINT (XCDR (val)));
- }
if (code < charset.min_code
|| code > charset.max_code)
args_out_of_range_3 (make_number (charset.min_code),
if (code < charset.min_code
|| code > charset.max_code)
args_out_of_range_3 (make_number (charset.min_code),
@@
-954,17
+945,8
@@
usage: (define-charset-internal ...) */)
val = args[charset_arg_max_code];
if (! NILP (val))
{
val = args[charset_arg_max_code];
if (! NILP (val))
{
- unsigned code;
+ unsigned code
= cons_to_unsigned (val, UINT_MAX)
;
- if (INTEGERP (val))
- code = XINT (val);
- else
- {
- CHECK_CONS (val);
- CHECK_NUMBER_CAR (val);
- CHECK_NUMBER_CDR (val);
- code = (XINT (XCAR (val)) << 16) | (XINT (XCDR (val)));
- }
if (code < charset.min_code
|| code > charset.max_code)
args_out_of_range_3 (make_number (charset.min_code),
if (code < charset.min_code
|| code > charset.max_code)
args_out_of_range_3 (make_number (charset.min_code),
@@
-1637,7
+1619,7
@@
maybe_unify_char (int c, Lisp_Object val)
struct charset *charset;
if (INTEGERP (val))
struct charset *charset;
if (INTEGERP (val))
- return XINT (val);
+ return X
FAST
INT (val);
if (NILP (val))
return c;
if (NILP (val))
return c;
@@
-1647,7
+1629,7
@@
maybe_unify_char (int c, Lisp_Object val)
{
val = CHAR_TABLE_REF (Vchar_unify_table, c);
if (! NILP (val))
{
val = CHAR_TABLE_REF (Vchar_unify_table, c);
if (! NILP (val))
- c = XINT (val);
+ c = X
FAST
INT (val);
}
else
{
}
else
{
@@
-1865,17
+1847,7
@@
and CODE-POINT to a character. Currently not supported and just ignored. */)
struct charset *charsetp;
CHECK_CHARSET_GET_ID (charset, id);
struct charset *charsetp;
CHECK_CHARSET_GET_ID (charset, id);
- if (CONSP (code_point))
- {
- CHECK_NATNUM_CAR (code_point);
- CHECK_NATNUM_CDR (code_point);
- code = (XINT (XCAR (code_point)) << 16) | (XINT (XCDR (code_point)));
- }
- else
- {
- CHECK_NATNUM (code_point);
- code = XINT (code_point);
- }
+ code = cons_to_unsigned (code_point, UINT_MAX);
charsetp = CHARSET_FROM_ID (id);
c = DECODE_CHAR (charsetp, code);
return (c >= 0 ? make_number (c) : Qnil);
charsetp = CHARSET_FROM_ID (id);
c = DECODE_CHAR (charsetp, code);
return (c >= 0 ? make_number (c) : Qnil);
@@
-1900,9
+1872,7
@@
code-point in CCS. Currently not supported and just ignored. */)
code = ENCODE_CHAR (charsetp, XINT (ch));
if (code == CHARSET_INVALID_CODE (charsetp))
return Qnil;
code = ENCODE_CHAR (charsetp, XINT (ch));
if (code == CHARSET_INVALID_CODE (charsetp))
return Qnil;
- if (code > 0x7FFFFFF)
- return Fcons (make_number (code >> 16), make_number (code & 0xFFFF));
- return make_number (code);
+ return INTEGER_TO_CONS (code);
}
}