Commit a2f3eb19 authored by Chong Yidong's avatar Chong Yidong

* charset.c (load_charset_map_from_file)

(load_charset_map_from_vector): Fix last change to use SAFE_ALLOCA
instead of xmalloc (Bug#5526).
parent ffe87109
2010-02-06 Chong Yidong <cyd@stupidchicken.com>
* charset.c (load_charset_map_from_file)
(load_charset_map_from_vector): Fix last change to use SAFE_ALLOCA
instead of xmalloc (Bug#5526).
2010-02-05 Chong Yidong <cyd@stupidchicken.com>
* charset.c (load_charset_map_from_file): Allocate large
......
......@@ -512,12 +512,13 @@ load_charset_map_from_file (charset, mapfile, control_flag)
int eof;
Lisp_Object suffixes;
struct charset_map_entries *head, *entries;
int n_entries;
int count = SPECPDL_INDEX ();
int n_entries, count;
USE_SAFE_ALLOCA;
suffixes = Fcons (build_string (".map"),
Fcons (build_string (".TXT"), Qnil));
count = SPECPDL_INDEX ();
specbind (Qfile_name_handler_alist, Qnil);
fd = openp (Vcharset_map_path, mapfile, suffixes, NULL, Qnil);
unbind_to (count, Qnil);
......@@ -525,8 +526,12 @@ load_charset_map_from_file (charset, mapfile, control_flag)
|| ! (fp = fdopen (fd, "r")))
error ("Failure in loading charset map: %S", SDATA (mapfile));
head = entries = ((struct charset_map_entries *)
xmalloc (sizeof (struct charset_map_entries)));
/* Use SAFE_ALLOCA instead of alloca, as `charset_map_entries' is
large (larger than MAX_ALLOCA). */
SAFE_ALLOCA (head, struct charset_map_entries *,
sizeof (struct charset_map_entries));
entries = head;
n_entries = 0;
eof = 0;
while (1)
......@@ -549,8 +554,8 @@ load_charset_map_from_file (charset, mapfile, control_flag)
if (n_entries > 0 && (n_entries % 0x10000) == 0)
{
entries->next = ((struct charset_map_entries *)
alloca (sizeof (struct charset_map_entries)));
SAFE_ALLOCA (entries->next, struct charset_map_entries *,
sizeof (struct charset_map_entries));
entries = entries->next;
}
idx = n_entries % 0x10000;
......@@ -563,7 +568,7 @@ load_charset_map_from_file (charset, mapfile, control_flag)
close (fd);
load_charset_map (charset, head, n_entries, control_flag);
xfree (head);
SAFE_FREE ();
}
static void
......@@ -578,6 +583,7 @@ load_charset_map_from_vector (charset, vec, control_flag)
int n_entries;
int len = ASIZE (vec);
int i;
USE_SAFE_ALLOCA;
if (len % 2 == 1)
{
......@@ -585,8 +591,12 @@ load_charset_map_from_vector (charset, vec, control_flag)
return;
}
head = entries = ((struct charset_map_entries *)
alloca (sizeof (struct charset_map_entries)));
/* Use SAFE_ALLOCA instead of alloca, as `charset_map_entries' is
large (larger than MAX_ALLOCA). */
SAFE_ALLOCA (head, struct charset_map_entries *,
sizeof (struct charset_map_entries));
entries = head;
n_entries = 0;
for (i = 0; i < len; i += 2)
{
......@@ -619,8 +629,8 @@ load_charset_map_from_vector (charset, vec, control_flag)
if (n_entries > 0 && (n_entries % 0x10000) == 0)
{
entries->next = ((struct charset_map_entries *)
alloca (sizeof (struct charset_map_entries)));
SAFE_ALLOCA (entries->next, struct charset_map_entries *,
sizeof (struct charset_map_entries));
entries = entries->next;
}
idx = n_entries % 0x10000;
......@@ -631,6 +641,7 @@ load_charset_map_from_vector (charset, vec, control_flag)
}
load_charset_map (charset, head, n_entries, control_flag);
SAFE_FREE ();
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment