aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa2001-02-09 05:32:24 +0000
committerKenichi Handa2001-02-09 05:32:24 +0000
commit5729c92fb2999977fdc2de367def7d847f6d249e (patch)
tree5e3ab8a1668800253a392bbc2a76b0ad7af031da /src
parente47a1c3370c4537ff4b9970d97d7076d912ccb18 (diff)
downloademacs-5729c92fb2999977fdc2de367def7d847f6d249e.tar.gz
emacs-5729c92fb2999977fdc2de367def7d847f6d249e.zip
(Fstring): If all arguments are less than 256, return a unibyte
string.
Diffstat (limited to 'src')
-rw-r--r--src/charset.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/charset.c b/src/charset.c
index 4bad7b5ab28..dcdb279b59f 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -1619,12 +1619,22 @@ DEFUN ("string", Fstring, Sstring, 1, MANY, 0,
1619 unsigned char *buf = (unsigned char *) alloca (MAX_MULTIBYTE_LENGTH * n); 1619 unsigned char *buf = (unsigned char *) alloca (MAX_MULTIBYTE_LENGTH * n);
1620 unsigned char *p = buf; 1620 unsigned char *p = buf;
1621 int c; 1621 int c;
1622 int multibyte = 0;
1622 1623
1623 for (i = 0; i < n; i++) 1624 for (i = 0; i < n; i++)
1624 { 1625 {
1625 CHECK_NUMBER (args[i], 0); 1626 CHECK_NUMBER (args[i], 0);
1627 if (!multibyte && !SINGLE_BYTE_CHAR_P (XFASTINT (args[i])))
1628 multibyte = 1;
1629 }
1630
1631 for (i = 0; i < n; i++)
1632 {
1626 c = XINT (args[i]); 1633 c = XINT (args[i]);
1627 p += CHAR_STRING (c, p); 1634 if (multibyte)
1635 p += CHAR_STRING (c, p);
1636 else
1637 *p++ += c;
1628 } 1638 }
1629 1639
1630 return make_string_from_bytes (buf, n, p - buf); 1640 return make_string_from_bytes (buf, n, p - buf);