[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/data.c [emacs-unicode-2]
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/src/data.c [emacs-unicode-2] |
Date: |
Tue, 29 Jun 2004 13:08:13 -0400 |
Index: emacs/src/data.c
diff -c emacs/src/data.c:1.224.4.4 emacs/src/data.c:1.224.4.5
*** emacs/src/data.c:1.224.4.4 Mon Jun 28 07:29:19 2004
--- emacs/src/data.c Tue Jun 29 16:46:01 2004
***************
*** 1983,1993 ****
}
}
- /* Don't use alloca for relocating string data larger than this, lest
- we overflow their stack. The value is the same as what used in
- fns.c for base64 handling. */
- #define MAX_ALLOCA 16*1024
-
DEFUN ("aset", Faset, Saset, 3, 3, 0,
doc: /* Store into the element of ARRAY at index IDX the value NEWELT.
Return NEWELT. ARRAY may be a vector, a string, a char-table or a
--- 1983,1988 ----
***************
*** 2051,2060 ****
/* We must relocate the string data. */
int nchars = SCHARS (array);
unsigned char *str;
! str = (nbytes <= MAX_ALLOCA
! ? (unsigned char *) alloca (nbytes)
! : (unsigned char *) xmalloc (nbytes));
bcopy (SDATA (array), str, nbytes);
allocate_string_data (XSTRING (array), nchars,
nbytes + new_bytes - prev_bytes);
--- 2046,2054 ----
/* We must relocate the string data. */
int nchars = SCHARS (array);
unsigned char *str;
+ USE_SAFE_ALLOCA;
! SAFE_ALLOCA (str, unsigned char *, nbytes);
bcopy (SDATA (array), str, nbytes);
allocate_string_data (XSTRING (array), nchars,
nbytes + new_bytes - prev_bytes);
***************
*** 2062,2069 ****
p1 = SDATA (array) + idxval_byte;
bcopy (str + idxval_byte + prev_bytes, p1 + new_bytes,
nbytes - (idxval_byte + prev_bytes));
! if (nbytes > MAX_ALLOCA)
! xfree (str);
clear_string_char_byte_cache ();
}
while (new_bytes--)
--- 2056,2062 ----
p1 = SDATA (array) + idxval_byte;
bcopy (str + idxval_byte + prev_bytes, p1 + new_bytes,
nbytes - (idxval_byte + prev_bytes));
! SAFE_FREE (nbytes);
clear_string_char_byte_cache ();
}
while (new_bytes--)
***************
*** 2086,2099 ****
unsigned char workbuf[MAX_MULTIBYTE_LENGTH], *p0 = workbuf, *p1;
unsigned char *origstr = SDATA (array), *str;
int nchars, nbytes;
nchars = SCHARS (array);
nbytes = idxval_byte = count_size_as_multibyte (origstr, idxval);
nbytes += count_size_as_multibyte (origstr + idxval,
nchars - idxval);
! str = (nbytes <= MAX_ALLOCA
! ? (unsigned char *) alloca (nbytes)
! : (unsigned char *) xmalloc (nbytes));
copy_text (SDATA (array), str, nchars, 0, 1);
PARSE_MULTIBYTE_SEQ (str + idxval_byte, nbytes - idxval_byte,
prev_bytes);
--- 2079,2091 ----
unsigned char workbuf[MAX_MULTIBYTE_LENGTH], *p0 = workbuf, *p1;
unsigned char *origstr = SDATA (array), *str;
int nchars, nbytes;
+ USE_SAFE_ALLOCA;
nchars = SCHARS (array);
nbytes = idxval_byte = count_size_as_multibyte (origstr, idxval);
nbytes += count_size_as_multibyte (origstr + idxval,
nchars - idxval);
! SAFE_ALLOCA (str, unsigned char *, nbytes);
copy_text (SDATA (array), str, nchars, 0, 1);
PARSE_MULTIBYTE_SEQ (str + idxval_byte, nbytes - idxval_byte,
prev_bytes);
***************
*** 2106,2113 ****
*p1++ = *p0++;
bcopy (str + idxval_byte + prev_bytes, p1,
nbytes - (idxval_byte + prev_bytes));
! if (nbytes > MAX_ALLOCA)
! xfree (str);
clear_string_char_byte_cache ();
}
}
--- 2098,2104 ----
*p1++ = *p0++;
bcopy (str + idxval_byte + prev_bytes, p1,
nbytes - (idxval_byte + prev_bytes));
! SAFE_FREE (nbytes);
clear_string_char_byte_cache ();
}
}