mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-17 11:20:39 -08:00
Coding system support cleanup and minor refactoring.
* coding.h (enum coding_result_code): Remove CODING_RESULT_INCONSISTENT_EOL and CODING_RESULT_INSUFFICIENT_MEM. (toplevel): Remove unused CODING_MODE_INHIBIT_INCONSISTENT_EOL. (CODING_MODE_LAST_BLOCK, CODING_MODE_SELECTIVE_DISPLAY) (CODING_MODE_DIRECTION, CODING_MODE_FIXED_DESTINATION) (CODING_MODE_SAFE_ENCODING): Rearrange bit values. (decode_coding_region, encode_coding_region, decode_coding_string): Remove unused compatibility macros. * coding.c (Qinconsistent_eol, Qinsufficient_memory): Remove. (record_conversion_result): Adjust user. (syms_of_coding): Likewise. (ALLOC_CONVERSION_WORK_AREA): Use SAFE_ALLOCA. (decode_coding, encode_coding): Add USE_SAFE_ALLOCA and SAFE_FREE. (decode_coding_object): Simplify since xrealloc never returns NULL. Add eassert.
This commit is contained in:
parent
34fd7a48dd
commit
1af1a51aad
3 changed files with 37 additions and 61 deletions
45
src/coding.c
45
src/coding.c
|
|
@ -322,8 +322,7 @@ Lisp_Object Qcall_process, Qcall_process_region;
|
|||
Lisp_Object Qstart_process, Qopen_network_stream;
|
||||
static Lisp_Object Qtarget_idx;
|
||||
|
||||
static Lisp_Object Qinsufficient_source, Qinconsistent_eol, Qinvalid_source;
|
||||
static Lisp_Object Qinterrupted, Qinsufficient_memory;
|
||||
static Lisp_Object Qinsufficient_source, Qinvalid_source, Qinterrupted;
|
||||
|
||||
/* If a symbol has this property, evaluate the value to define the
|
||||
symbol as a coding system. */
|
||||
|
|
@ -820,18 +819,12 @@ record_conversion_result (struct coding_system *coding,
|
|||
case CODING_RESULT_INSUFFICIENT_SRC:
|
||||
Vlast_code_conversion_error = Qinsufficient_source;
|
||||
break;
|
||||
case CODING_RESULT_INCONSISTENT_EOL:
|
||||
Vlast_code_conversion_error = Qinconsistent_eol;
|
||||
break;
|
||||
case CODING_RESULT_INVALID_SRC:
|
||||
Vlast_code_conversion_error = Qinvalid_source;
|
||||
break;
|
||||
case CODING_RESULT_INTERRUPT:
|
||||
Vlast_code_conversion_error = Qinterrupted;
|
||||
break;
|
||||
case CODING_RESULT_INSUFFICIENT_MEM:
|
||||
Vlast_code_conversion_error = Qinsufficient_memory;
|
||||
break;
|
||||
case CODING_RESULT_INSUFFICIENT_DST:
|
||||
/* Don't record this error in Vlast_code_conversion_error
|
||||
because it happens just temporarily and is resolved when the
|
||||
|
|
@ -6884,22 +6877,8 @@ produce_charset (struct coding_system *coding, int *charbuf, ptrdiff_t pos)
|
|||
|
||||
#define ALLOC_CONVERSION_WORK_AREA(coding) \
|
||||
do { \
|
||||
int size = CHARBUF_SIZE; \
|
||||
\
|
||||
coding->charbuf = NULL; \
|
||||
while (size > 1024) \
|
||||
{ \
|
||||
coding->charbuf = alloca (sizeof (int) * size); \
|
||||
if (coding->charbuf) \
|
||||
break; \
|
||||
size >>= 1; \
|
||||
} \
|
||||
if (! coding->charbuf) \
|
||||
{ \
|
||||
record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_MEM); \
|
||||
return; \
|
||||
} \
|
||||
coding->charbuf_size = size; \
|
||||
coding->charbuf = SAFE_ALLOCA (CHARBUF_SIZE * sizeof (int)); \
|
||||
coding->charbuf_size = CHARBUF_SIZE; \
|
||||
} while (0)
|
||||
|
||||
|
||||
|
|
@ -6968,6 +6947,8 @@ decode_coding (struct coding_system *coding)
|
|||
int carryover;
|
||||
int i;
|
||||
|
||||
USE_SAFE_ALLOCA;
|
||||
|
||||
if (BUFFERP (coding->src_object)
|
||||
&& coding->src_pos > 0
|
||||
&& coding->src_pos < GPT
|
||||
|
|
@ -7090,6 +7071,8 @@ decode_coding (struct coding_system *coding)
|
|||
bset_undo_list (current_buffer, undo_list);
|
||||
record_insert (coding->dst_pos, coding->produced_char);
|
||||
}
|
||||
|
||||
SAFE_FREE ();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -7373,6 +7356,8 @@ encode_coding (struct coding_system *coding)
|
|||
int max_lookup;
|
||||
struct ccl_spec cclspec;
|
||||
|
||||
USE_SAFE_ALLOCA;
|
||||
|
||||
attrs = CODING_ID_ATTRS (coding->id);
|
||||
if (coding->encoder == encode_coding_raw_text)
|
||||
translation_table = Qnil, max_lookup = 0;
|
||||
|
|
@ -7407,6 +7392,8 @@ encode_coding (struct coding_system *coding)
|
|||
|
||||
if (BUFFERP (coding->dst_object) && coding->produced_char > 0)
|
||||
insert_from_gap (coding->produced_char, coding->produced);
|
||||
|
||||
SAFE_FREE ();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -7695,14 +7682,8 @@ decode_coding_object (struct coding_system *coding,
|
|||
set_buffer_internal (XBUFFER (coding->dst_object));
|
||||
if (dst_bytes < coding->produced)
|
||||
{
|
||||
eassert (coding->produced > 0);
|
||||
destination = xrealloc (destination, coding->produced);
|
||||
if (! destination)
|
||||
{
|
||||
record_conversion_result (coding,
|
||||
CODING_RESULT_INSUFFICIENT_MEM);
|
||||
unbind_to (count, Qnil);
|
||||
return;
|
||||
}
|
||||
if (BEGV < GPT && GPT < BEGV + coding->produced_char)
|
||||
move_gap_both (BEGV, BEGV_BYTE);
|
||||
memcpy (destination, BEGV_ADDR, coding->produced);
|
||||
|
|
@ -10408,10 +10389,8 @@ syms_of_coding (void)
|
|||
intern_c_string ("coding-category-undecided"));
|
||||
|
||||
DEFSYM (Qinsufficient_source, "insufficient-source");
|
||||
DEFSYM (Qinconsistent_eol, "inconsistent-eol");
|
||||
DEFSYM (Qinvalid_source, "invalid-source");
|
||||
DEFSYM (Qinterrupted, "interrupted");
|
||||
DEFSYM (Qinsufficient_memory, "insufficient-memory");
|
||||
DEFSYM (Qcoding_system_define_form, "coding-system-define-form");
|
||||
|
||||
defsubr (&Scoding_system_p);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue