mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
Optimize `scm_{to,from}_latin1_string'.
* libguile/strings.c (scm_from_latin1_stringn): Directly return a narrow string instead of going through `scm_from_stringn'. (scm_to_latin1_stringn): Directly return a copy of STR's raw bytes when it's narrow.
This commit is contained in:
parent
c32f0d6b87
commit
e9a35a965b
1 changed files with 29 additions and 2 deletions
|
@ -1545,7 +1545,17 @@ scm_from_latin1_string (const char *str)
|
|||
SCM
|
||||
scm_from_latin1_stringn (const char *str, size_t len)
|
||||
{
|
||||
return scm_from_stringn (str, len, NULL, SCM_FAILED_CONVERSION_ERROR);
|
||||
char *buf;
|
||||
SCM result;
|
||||
|
||||
if (len == (size_t) -1)
|
||||
len = strlen (str);
|
||||
|
||||
/* Make a narrow string and copy STR as is. */
|
||||
result = scm_i_make_string (len, &buf);
|
||||
memcpy (buf, str, len);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
SCM
|
||||
|
@ -1752,9 +1762,26 @@ scm_to_latin1_string (SCM str)
|
|||
|
||||
char *
|
||||
scm_to_latin1_stringn (SCM str, size_t *lenp)
|
||||
#define FUNC_NAME "scm_to_latin1_stringn"
|
||||
{
|
||||
return scm_to_stringn (str, lenp, NULL, SCM_FAILED_CONVERSION_ERROR);
|
||||
char *result;
|
||||
|
||||
SCM_VALIDATE_STRING (1, str);
|
||||
|
||||
if (scm_i_is_narrow_string (str))
|
||||
{
|
||||
if (lenp)
|
||||
*lenp = scm_i_string_length (str);
|
||||
|
||||
result = scm_strdup (scm_i_string_data (str));
|
||||
}
|
||||
else
|
||||
result = scm_to_stringn (str, lenp, NULL,
|
||||
SCM_FAILED_CONVERSION_ERROR);
|
||||
|
||||
return result;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
char *
|
||||
scm_to_utf8_string (SCM str)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue