comparison src/charset.c @ 56190:f7711455b84f

(Fstring): Use SAFE_ALLOCA.
author Kim F. Storm <storm@cua.dk>
date Mon, 21 Jun 2004 21:52:46 +0000
parents 7abf0e14a59e
children 66e97a54985f
comparison
equal deleted inserted replaced
56189:d2086c9c0507 56190:f7711455b84f
1643 usage: (string &rest CHARACTERS) */) 1643 usage: (string &rest CHARACTERS) */)
1644 (n, args) 1644 (n, args)
1645 int n; 1645 int n;
1646 Lisp_Object *args; 1646 Lisp_Object *args;
1647 { 1647 {
1648 int i; 1648 int i, bufsize;
1649 unsigned char *buf = (unsigned char *) alloca (MAX_MULTIBYTE_LENGTH * n); 1649 unsigned char *buf, *p;
1650 unsigned char *p = buf;
1651 int c; 1650 int c;
1652 int multibyte = 0; 1651 int multibyte = 0;
1652 Lisp_Object ret;
1653 USE_SAFE_ALLOCA;
1654
1655 bufsize = MAX_MULTIBYTE_LENGTH * n;
1656 SAFE_ALLOCA (buf, unsigned char *, bufsize);
1657 p = buf;
1653 1658
1654 for (i = 0; i < n; i++) 1659 for (i = 0; i < n; i++)
1655 { 1660 {
1656 CHECK_NUMBER (args[i]); 1661 CHECK_NUMBER (args[i]);
1657 if (!multibyte && !SINGLE_BYTE_CHAR_P (XFASTINT (args[i]))) 1662 if (!multibyte && !SINGLE_BYTE_CHAR_P (XFASTINT (args[i])))
1665 p += CHAR_STRING (c, p); 1670 p += CHAR_STRING (c, p);
1666 else 1671 else
1667 *p++ = c; 1672 *p++ = c;
1668 } 1673 }
1669 1674
1670 return make_string_from_bytes (buf, n, p - buf); 1675 ret = make_string_from_bytes (buf, n, p - buf);
1676 SAFE_FREE (bufsize);
1677
1678 return ret;
1671 } 1679 }
1672 1680
1673 #endif /* emacs */ 1681 #endif /* emacs */
1674 1682
1675 int 1683 int