diff options
Diffstat (limited to 'src/charset.c')
-rw-r--r-- | src/charset.c | 52 |
1 files changed, 21 insertions, 31 deletions
diff --git a/src/charset.c b/src/charset.c index 6967b9df611..9d58d29d05c 100644 --- a/src/charset.c +++ b/src/charset.c @@ -482,7 +482,8 @@ load_charset_map_from_file (struct charset *charset, Lisp_Object mapfile, int co FILE *fp; Lisp_Object suffixes; struct charset_map_entries *head, *entries; - int n_entries, count; + int n_entries; + ptrdiff_t count; USE_SAFE_ALLOCA; suffixes = Fcons (build_string (".map"), @@ -534,8 +535,9 @@ load_charset_map_from_file (struct charset *charset, Lisp_Object mapfile, int co sizeof (struct charset_map_entries)); entries = entries->next; memset (entries, 0, sizeof (struct charset_map_entries)); + n_entries = 0; } - idx = n_entries % 0x10000; + idx = n_entries; entries->entry[idx].from = from; entries->entry[idx].to = to; entries->entry[idx].c = c; @@ -576,7 +578,7 @@ load_charset_map_from_vector (struct charset *charset, Lisp_Object vec, int cont { Lisp_Object val, val2; unsigned from, to; - int c; + EMACS_INT c; int idx; val = AREF (vec, i); @@ -584,16 +586,11 @@ load_charset_map_from_vector (struct charset *charset, Lisp_Object vec, int cont { val2 = XCDR (val); val = XCAR (val); - CHECK_NATNUM (val); - CHECK_NATNUM (val2); from = XFASTINT (val); to = XFASTINT (val2); } else - { - CHECK_NATNUM (val); - from = to = XFASTINT (val); - } + from = to = XFASTINT (val); val = AREF (vec, i + 1); CHECK_NATNUM (val); c = XFASTINT (val); @@ -821,7 +818,6 @@ range of code points (in CHARSET) of target characters. */) from = CHARSET_MIN_CODE (cs); else { - CHECK_NATNUM (from_code); from = XINT (from_code); if (from < CHARSET_MIN_CODE (cs)) from = CHARSET_MIN_CODE (cs); @@ -830,7 +826,6 @@ range of code points (in CHARSET) of target characters. */) to = CHARSET_MAX_CODE (cs); else { - CHECK_NATNUM (to_code); to = XINT (to_code); if (to > CHARSET_MAX_CODE (cs)) to = CHARSET_MAX_CODE (cs); @@ -876,12 +871,15 @@ usage: (define-charset-internal ...) */) val = args[charset_arg_code_space]; for (i = 0, dimension = 0, nchars = 1; ; i++) { + Lisp_Object min_byte_obj, max_byte_obj; int min_byte, max_byte; - min_byte = XINT (Faref (val, make_number (i * 2))); - max_byte = XINT (Faref (val, make_number (i * 2 + 1))); - if (min_byte < 0 || min_byte > max_byte || max_byte >= 256) - error ("Invalid :code-space value"); + min_byte_obj = Faref (val, make_number (i * 2)); + max_byte_obj = Faref (val, make_number (i * 2 + 1)); + CHECK_RANGED_INTEGER (0, min_byte_obj, 255); + min_byte = XINT (min_byte_obj); + CHECK_RANGED_INTEGER (min_byte, max_byte_obj, 255); + max_byte = XINT (max_byte_obj); charset.code_space[i * 4] = min_byte; charset.code_space[i * 4 + 1] = max_byte; charset.code_space[i * 4 + 2] = max_byte - min_byte + 1; @@ -898,10 +896,8 @@ usage: (define-charset-internal ...) */) charset.dimension = dimension; else { - CHECK_NATNUM (val); + CHECK_RANGED_INTEGER (1, val, 4); charset.dimension = XINT (val); - if (charset.dimension < 1 || charset.dimension > 4) - args_out_of_range_3 (val, make_number (1), make_number (4)); } charset.code_linear_p @@ -968,18 +964,14 @@ usage: (define-charset-internal ...) */) charset.invalid_code = 0; else { - XSETINT (val, charset.max_code + 1); - if (XINT (val) == charset.max_code + 1) + if (charset.max_code < min (UINT_MAX, MOST_POSITIVE_FIXNUM)) charset.invalid_code = charset.max_code + 1; else error ("Attribute :invalid-code must be specified"); } } else - { - CHECK_NATNUM (val); - charset.invalid_code = XFASTINT (val); - } + charset.invalid_code = XFASTINT (val); val = args[charset_arg_iso_final]; if (NILP (val)) @@ -997,9 +989,7 @@ usage: (define-charset-internal ...) */) charset.iso_revision = -1; else { - CHECK_NUMBER (val); - if (XINT (val) > 63) - args_out_of_range (make_number (63), val); + CHECK_RANGED_INTEGER (-1, val, 63); charset.iso_revision = XINT (val); } @@ -1025,7 +1015,7 @@ usage: (define-charset-internal ...) */) if (! NILP (args[charset_arg_code_offset])) { val = args[charset_arg_code_offset]; - CHECK_NUMBER (val); + CHECK_TYPE_RANGED_INTEGER (int, val); charset.method = CHARSET_METHOD_OFFSET; charset.code_offset = XINT (val); @@ -1106,7 +1096,7 @@ usage: (define-charset-internal ...) */) car_part = XCAR (elt); cdr_part = XCDR (elt); CHECK_CHARSET_GET_ID (car_part, this_id); - CHECK_NUMBER (cdr_part); + CHECK_TYPE_RANGED_INTEGER (int, cdr_part); offset = XINT (cdr_part); } else @@ -1511,7 +1501,7 @@ string_xstring_p (Lisp_Object string) It may lookup a translation table TABLE if supplied. */ static void -find_charsets_in_text (const unsigned char *ptr, EMACS_INT nchars, EMACS_INT nbytes, Lisp_Object charsets, Lisp_Object table, int multibyte) +find_charsets_in_text (const unsigned char *ptr, ptrdiff_t nchars, ptrdiff_t nbytes, Lisp_Object charsets, Lisp_Object table, int multibyte) { const unsigned char *pend = ptr + nbytes; @@ -1558,7 +1548,7 @@ only `ascii', `eight-bit-control', and `eight-bit-graphic'. */) (Lisp_Object beg, Lisp_Object end, Lisp_Object table) { Lisp_Object charsets; - EMACS_INT from, from_byte, to, stop, stop_byte; + ptrdiff_t from, from_byte, to, stop, stop_byte; int i; Lisp_Object val; int multibyte = ! NILP (BVAR (current_buffer, enable_multibyte_characters)); |