mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-28 07:50:20 +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
|
||||||
scm_from_latin1_stringn (const char *str, size_t len)
|
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
|
SCM
|
||||||
|
@ -1752,9 +1762,26 @@ scm_to_latin1_string (SCM str)
|
||||||
|
|
||||||
char *
|
char *
|
||||||
scm_to_latin1_stringn (SCM str, size_t *lenp)
|
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 *
|
char *
|
||||||
scm_to_utf8_string (SCM str)
|
scm_to_utf8_string (SCM str)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue