summaryrefslogtreecommitdiff
path: root/libguile/strings.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/strings.c')
-rw-r--r--libguile/strings.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/libguile/strings.c b/libguile/strings.c
index dab7a18f8..3aa24958d 100644
--- a/libguile/strings.c
+++ b/libguile/strings.c
@@ -336,6 +336,7 @@ SCM_DEFINE (scm_string_append, "string-append", 0, 0, 1,
}
#undef FUNC_NAME
+
/* Converts the given Scheme string OBJ into a C string, containing a copy
of OBJ's content with a trailing null byte. If LENP is non-NULL, set
*LENP to the string's length.
@@ -347,8 +348,8 @@ SCM_DEFINE (scm_string_append, "string-append", 0, 0, 1,
Note that Scheme strings may contain arbitrary data, including null
characters. This means that null termination is not a reliable way to
determine the length of the returned value. However, the function always
- copies the complete contents of OBJ, and sets *LENP to the true length
- of the string (if LENP is non-null). */
+ copies the complete contents of OBJ, and sets *LENP to the length of the
+ scheme string (if LENP is non-null). */
char *
scm_c_string2str (SCM obj, char *str, size_t *lenp)
{
@@ -357,22 +358,26 @@ scm_c_string2str (SCM obj, char *str, size_t *lenp)
SCM_ASSERT (SCM_STRINGP (obj), obj, SCM_ARG1, "scm_c_string2str");
len = SCM_STRING_LENGTH (obj);
- /* THINKME: What malloc policy? */
- if (str == NULL)
- str = (char *) malloc ((len + 1) * sizeof (char));
if (str == NULL)
- return NULL;
+ {
+ /* FIXME: Should we use exported wrappers for malloc (and free), which
+ * allow windows DLLs to call the correct freeing function? */
+ str = (char *) malloc ((len + 1) * sizeof (char));
+ if (str == NULL)
+ return NULL;
+ }
memcpy (str, SCM_STRING_CHARS (obj), len);
- /* THINKME: Is this necessary for arguments? I do not think so... */
scm_remember_upto_here_1 (obj);
str[len] = '\0';
if (lenp != NULL)
*lenp = len;
+
return str;
}
+
void
scm_init_strings ()
{