GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
while (1)
{
- int c, id IF_LINT (= 0);
+ int c;
+ int id UNINIT;
src_base = src;
consumed_chars_base = consumed_chars;
}
else
{
- int nchars IF_LINT (= 0), nbytes IF_LINT (= 0);
+ int nchars UNINIT, nbytes UNINIT;
/* emacs_mule_char can load a charset map from a file, which
allocates a large structure and might cause buffer text
to be relocated as result. Thus, we need to remember the
while (pos_byte < pos_end)
{
+ int incr;
+
p = BYTE_POS_ADDR (pos_byte);
+ if (coding->dst_multibyte)
+ incr = BYTES_BY_CHAR_HEAD (*p);
+ else
+ incr = 1;
+
if (*p == '\r' && p[1] == '\n')
{
del_range_2 (pos, pos_byte, pos + 1, pos_byte + 1, 0);
pos_end--;
}
pos++;
- if (coding->dst_multibyte)
- pos_byte += BYTES_BY_CHAR_HEAD (*p);
- else
- pos_byte++;
+ pos_byte += incr;
}
coding->produced -= n;
coding->produced_char -= n;
/* Return a translation of character(s) at BUF according to TRANS.
- TRANS is TO-CHAR or ((FROM . TO) ...) where
- FROM = [FROM-CHAR ...], TO is TO-CHAR or [TO-CHAR ...].
- The return value is TO-CHAR or ([FROM-CHAR ...] . TO) if a
- translation is found, and Qnil if not found..
- If BUF is too short to lookup characters in FROM, return Qt. */
+ TRANS is TO-CHAR, [TO-CHAR ...], or ((FROM . TO) ...) where FROM =
+ [FROM-CHAR ...], TO is TO-CHAR or [TO-CHAR ...]. The return value
+ is TO-CHAR or [TO-CHAR ...] if a translation is found, Qnil if not
+ found, or Qt if BUF is too short to lookup characters in FROM. As
+ a side effect, if a translation is found, *NCHARS is set to the
+ number of characters being translated. */
static Lisp_Object
-get_translation (Lisp_Object trans, int *buf, int *buf_end)
+get_translation (Lisp_Object trans, int *buf, int *buf_end, ptrdiff_t *nchars)
{
-
- if (INTEGERP (trans))
- return trans;
+ if (INTEGERP (trans) || VECTORP (trans))
+ {
+ *nchars = 1;
+ return trans;
+ }
for (; CONSP (trans); trans = XCDR (trans))
{
Lisp_Object val = XCAR (trans);
break;
}
if (i == len)
- return val;
+ {
+ *nchars = len;
+ return XCDR (val);
+ }
}
return Qnil;
}
LOOKUP_TRANSLATION_TABLE (translation_table, c, trans);
if (! NILP (trans))
{
- trans = get_translation (trans, buf, buf_end);
+ trans = get_translation (trans, buf, buf_end, &from_nchars);
if (INTEGERP (trans))
c = XINT (trans);
- else if (CONSP (trans))
+ else if (VECTORP (trans))
{
- from_nchars = ASIZE (XCAR (trans));
- trans = XCDR (trans);
- if (INTEGERP (trans))
- c = XINT (trans);
- else
- {
- to_nchars = ASIZE (trans);
- c = XINT (AREF (trans, 0));
- }
+ to_nchars = ASIZE (trans);
+ c = XINT (AREF (trans, 0));
}
else if (EQ (trans, Qt) && ! last_block)
break;
for (i = 1; i < max_lookup && p < src_end; i++)
lookup_buf[i] = STRING_CHAR_ADVANCE (p);
lookup_buf_end = lookup_buf + i;
- trans = get_translation (trans, lookup_buf, lookup_buf_end);
+ trans = get_translation (trans, lookup_buf, lookup_buf_end,
+ &from_nchars);
if (INTEGERP (trans))
c = XINT (trans);
- else if (CONSP (trans))
+ else if (VECTORP (trans))
{
- from_nchars = ASIZE (XCAR (trans));
- trans = XCDR (trans);
- if (INTEGERP (trans))
- c = XINT (trans);
- else
- {
- to_nchars = ASIZE (trans);
- if (buf_end - buf < to_nchars)
- break;
- c = XINT (AREF (trans, 0));
- }
+ to_nchars = ASIZE (trans);
+ if (buf_end - buf < to_nchars)
+ break;
+ c = XINT (AREF (trans, 0));
}
else
break;
Lisp_Object dst_object)
{
ptrdiff_t count = SPECPDL_INDEX ();
- unsigned char *destination IF_LINT (= NULL);
- ptrdiff_t dst_bytes IF_LINT (= 0);
+ unsigned char *destination;
+ ptrdiff_t dst_bytes;
ptrdiff_t chars = to - from;
ptrdiff_t bytes = to_byte - from_byte;
Lisp_Object attrs;
- ptrdiff_t saved_pt = -1, saved_pt_byte IF_LINT (= 0);
+ ptrdiff_t saved_pt = -1, saved_pt_byte;
bool need_marker_adjustment = 0;
Lisp_Object old_deactivate_mark;
ptrdiff_t chars = to - from;
ptrdiff_t bytes = to_byte - from_byte;
Lisp_Object attrs;
- ptrdiff_t saved_pt = -1, saved_pt_byte IF_LINT (= 0);
+ ptrdiff_t saved_pt = -1, saved_pt_byte;
bool need_marker_adjustment = 0;
bool kill_src_buffer = 0;
Lisp_Object old_deactivate_mark;
Lisp_Object
from_unicode_buffer (const wchar_t *wstr)
{
- return from_unicode (
- make_unibyte_string (
- (char *) wstr,
- /* we get one of the two final 0 bytes for free. */
- 1 + sizeof (wchar_t) * wcslen (wstr)));
+ /* We get one of the two final null bytes for free. */
+ ptrdiff_t len = 1 + sizeof (wchar_t) * wcslen (wstr);
+ AUTO_STRING_WITH_LEN (str, (char *) wstr, len);
+ return from_unicode (str);
}
wchar_t *
base_category = XINT (CODING_ATTR_CATEGORY (attrs));
if (base_category == coding_category_undecided)
{
- enum coding_category category IF_LINT (= 0);
- struct coding_system *this IF_LINT (= NULL);
+ enum coding_category category UNINIT;
+ struct coding_system *this UNINIT;
int c, i;
bool inhibit_nbd = inhibit_flag (coding.spec.undecided.inhibit_nbd,
inhibit_null_byte_detection);
doc: /* Choose a coding system for an operation based on the target name.
The value names a pair of coding systems: (DECODING-SYSTEM . ENCODING-SYSTEM).
DECODING-SYSTEM is the coding system to use for decoding
-(in case OPERATION does decoding), and ENCODING-SYSTEM is the coding system
+\(in case OPERATION does decoding), and ENCODING-SYSTEM is the coding system
for encoding (in case OPERATION does encoding).
The first argument OPERATION specifies an I/O primitive:
if (!(STRINGP (target)
|| (EQ (operation, Qinsert_file_contents) && CONSP (target)
&& STRINGP (XCAR (target)) && BUFFERP (XCDR (target)))
- || (EQ (operation, Qopen_network_stream) && INTEGERP (target))))
+ || (EQ (operation, Qopen_network_stream)
+ && (INTEGERP (target) || EQ (target, Qt)))))
error ("Invalid argument %"pI"d of operation `%s'",
XFASTINT (target_idx) + 1, SDATA (SYMBOL_NAME (operation)));
if (CONSP (target))
Table of extra Latin codes in the range 128..159 (inclusive).
This is a vector of length 256.
If Nth element is non-nil, the existence of code N in a file
-(or output of subprocess) doesn't prevent it to be detected as
+\(or output of subprocess) doesn't prevent it to be detected as
a coding system of ISO 2022 variant which has a flag
`accept-latin-extra-code' t (e.g. iso-latin-1) on reading a file
or reading output of a subprocess.
#endif
staticpro (&system_eol_type);
}
-
-char *
-emacs_strerror (int error_number)
-{
- char *str;
-
- synchronize_system_messages_locale ();
- str = strerror (error_number);
-
- if (! NILP (Vlocale_coding_system))
- {
- Lisp_Object dec = code_convert_string_norecord (build_string (str),
- Vlocale_coding_system,
- 0);
- str = SSDATA (dec);
- }
-
- return str;
-}
-
#endif /* emacs */