+2013-03-06 Dmitry Antipov <dmantipov@yandex.ru>
+
+ 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.
+
2013-03-06 Paul Eggert <eggert@cs.ucla.edu>
Fix a build failure on OpenBSD 4.x and MirBSD (Bug#13881).
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. */
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
#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)
int carryover;
int i;
+ USE_SAFE_ALLOCA;
+
if (BUFFERP (coding->src_object)
&& coding->src_pos > 0
&& coding->src_pos < GPT
bset_undo_list (current_buffer, undo_list);
record_insert (coding->dst_pos, coding->produced_char);
}
+
+ SAFE_FREE ();
}
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;
if (BUFFERP (coding->dst_object) && coding->produced_char > 0)
insert_from_gap (coding->produced_char, coding->produced);
+
+ SAFE_FREE ();
}
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);
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);
CODING_RESULT_SUCCESS,
CODING_RESULT_INSUFFICIENT_SRC,
CODING_RESULT_INSUFFICIENT_DST,
- CODING_RESULT_INCONSISTENT_EOL,
CODING_RESULT_INVALID_SRC,
- CODING_RESULT_INTERRUPT,
- CODING_RESULT_INSUFFICIENT_MEM
+ CODING_RESULT_INTERRUPT
};
/* Macros used for the member `mode' of the struct coding_system. */
-/* If set, recover the original CR or LF of the already decoded text
- when the decoding routine encounters an inconsistent eol format. */
-#define CODING_MODE_INHIBIT_INCONSISTENT_EOL 0x01
-
/* If set, the decoding/encoding routines treat the current data as
the last block of the whole text to be converted, and do the
appropriate finishing job. */
-#define CODING_MODE_LAST_BLOCK 0x02
+#define CODING_MODE_LAST_BLOCK 0x01
/* If set, it means that the current source text is in a buffer which
enables selective display. */
-#define CODING_MODE_SELECTIVE_DISPLAY 0x04
+#define CODING_MODE_SELECTIVE_DISPLAY 0x02
/* This flag is used by the decoding/encoding routines on the fly. If
set, it means that right-to-left text is being processed. */
-#define CODING_MODE_DIRECTION 0x08
+#define CODING_MODE_DIRECTION 0x04
-#define CODING_MODE_FIXED_DESTINATION 0x10
+#define CODING_MODE_FIXED_DESTINATION 0x08
/* If set, it means that the encoding routines produces some safe
ASCII characters (usually '?') for unsupported characters. */
-#define CODING_MODE_SAFE_ENCODING 0x20
+#define CODING_MODE_SAFE_ENCODING 0x10
/* For handling composition sequence. */
#include "composite.h"
/* Macros for backward compatibility. */
-#define decode_coding_region(coding, from, to) \
- decode_coding_object (coding, Fcurrent_buffer (), \
- from, CHAR_TO_BYTE (from), \
- to, CHAR_TO_BYTE (to), Fcurrent_buffer ())
-
-
-#define encode_coding_region(coding, from, to) \
- encode_coding_object (coding, Fcurrent_buffer (), \
- from, CHAR_TO_BYTE (from), \
- to, CHAR_TO_BYTE (to), Fcurrent_buffer ())
-
-
-#define decode_coding_string(coding, string, nocopy) \
- decode_coding_object (coding, string, 0, 0, SCHARS (string), \
- SBYTES (string), Qt)
-
#define encode_coding_string(coding, string, nocopy) \
(STRING_MULTIBYTE(string) ? \
(encode_coding_object (coding, string, 0, 0, SCHARS (string), \