From fda6144e04bb1621a7833e6b9c32701afb1563b6 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Sat, 28 Jun 2014 22:38:36 +0900 Subject: [PATCH] * coding.c (MAX_CHARBUF_SIZE): Renamed from CHARBUF_SIZE. (MIN_CHARBUF_SIZE): New macro. (ALLOC_CONVERSION_WORK_AREA): New arg SIZE. Callers changed. --- src/ChangeLog | 6 ++++++ src/coding.c | 19 +++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index b25e2d487d..2f611365fc 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2014-06-28 K. Handa + + * coding.c (MAX_CHARBUF_SIZE): Renamed from CHARBUF_SIZE. + (MIN_CHARBUF_SIZE): New macro. + (ALLOC_CONVERSION_WORK_AREA): New arg SIZE. Callers changed. + 2014-06-27 Glenn Morris * Makefile.in: Replace BOOTSTRAPEMACS sleight-of-hand diff --git a/src/coding.c b/src/coding.c index 79f116fc61..64bad7ccbe 100644 --- a/src/coding.c +++ b/src/coding.c @@ -7265,13 +7265,16 @@ produce_charset (struct coding_system *coding, int *charbuf, ptrdiff_t pos) coding->dst_object); } +#define MAX_CHARBUF_SIZE 0x4000 +#define MIN_CHARBUF_SIZE 0x10 -#define CHARBUF_SIZE 0x4000 - -#define ALLOC_CONVERSION_WORK_AREA(coding) \ - do { \ - coding->charbuf = SAFE_ALLOCA (CHARBUF_SIZE * sizeof (int)); \ - coding->charbuf_size = CHARBUF_SIZE; \ +#define ALLOC_CONVERSION_WORK_AREA(coding, size) \ + do { \ + int units = ((size) > MAX_CHARBUF_SIZE ? MAX_CHARBUF_SIZE \ + : (size) < MIN_CHARBUF_SIZE ? MIN_CHARBUF_SIZE \ + : size); \ + coding->charbuf = SAFE_ALLOCA ((units) * sizeof (int)); \ + coding->charbuf_size = (units); \ } while (0) @@ -7373,7 +7376,7 @@ decode_coding (struct coding_system *coding) record_conversion_result (coding, CODING_RESULT_SUCCESS); coding->errors = 0; - ALLOC_CONVERSION_WORK_AREA (coding); + ALLOC_CONVERSION_WORK_AREA (coding, coding->src_bytes); attrs = CODING_ID_ATTRS (coding->id); translation_table = get_translation_table (attrs, 0, NULL); @@ -7769,7 +7772,7 @@ encode_coding (struct coding_system *coding) record_conversion_result (coding, CODING_RESULT_SUCCESS); coding->errors = 0; - ALLOC_CONVERSION_WORK_AREA (coding); + ALLOC_CONVERSION_WORK_AREA (coding, coding->src_chars); if (coding->encoder == encode_coding_ccl) { -- 2.20.1