Mercurial > emacs
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 |