summaryrefslogtreecommitdiff
path: root/Lib/guile/guile_scm_run.swg
diff options
context:
space:
mode:
authorGeert Janssens <janssens-geert@telenet.be>2013-12-13 17:48:26 +0100
committerGeert Janssens <janssens-geert@telenet.be>2014-02-05 12:17:16 +0100
commitc6d03a6a9fd4af3bd22b9754f82abe0bd5555e84 (patch)
treeaebef7e7a8d7bb9caebbc13c99430d7c3f4fa923 /Lib/guile/guile_scm_run.swg
parenta54674eeca8c5173b915e6bd21de4ccd4298fcf5 (diff)
downloadswig-c6d03a6a9fd4af3bd22b9754f82abe0bd5555e84.tar.gz
Guile: make scm to string conversion work with non-ascii strings
Diffstat (limited to 'Lib/guile/guile_scm_run.swg')
-rw-r--r--Lib/guile/guile_scm_run.swg22
1 files changed, 9 insertions, 13 deletions
diff --git a/Lib/guile/guile_scm_run.swg b/Lib/guile/guile_scm_run.swg
index 2f8f3ae98..322d660c5 100644
--- a/Lib/guile/guile_scm_run.swg
+++ b/Lib/guile/guile_scm_run.swg
@@ -41,10 +41,14 @@ typedef struct swig_guile_clientdata {
SCM goops_class;
} swig_guile_clientdata;
+#if SCM_MAJOR_VERSION <= 2
+#define scm_to_utf8_string scm_to_locale_string
+#define scm_from_utf8_string scm_from_locale_string
+#endif
#define SWIG_scm2str(s) \
SWIG_Guile_scm2newstr(s, NULL)
#define SWIG_str02scm(str) \
- str ? scm_from_locale_string(str) : SCM_BOOL_F
+ str ? scm_from_utf8_string(str) : SCM_BOOL_F
# define SWIG_malloc(size) \
scm_malloc(size)
# define SWIG_free(mem) \
@@ -84,21 +88,13 @@ SWIGINTERN char *
SWIG_Guile_scm2newstr(SCM str, size_t *len) {
#define FUNC_NAME "SWIG_Guile_scm2newstr"
char *ret;
- char *tmp;
- size_t l;
SCM_ASSERT (scm_is_string(str), str, 1, FUNC_NAME);
- l = scm_c_string_length(str);
- ret = (char *) SWIG_malloc( (l + 1) * sizeof(char));
+ ret = scm_to_utf8_string(str);
if (!ret) return NULL;
- tmp = scm_to_locale_string(str);
- memcpy(ret, tmp, l);
- free(tmp);
-
- ret[l] = '\0';
- if (len) *len = l;
+ if (len) *len = strlen(ret) - 1;
return ret;
#undef FUNC_NAME
}
@@ -473,7 +469,7 @@ SWIG_Guile_GetArgs (SCM *dest, SCM rest,
int num_args_passed = 0;
for (i = 0; i<reqargs; i++) {
if (!SCM_CONSP(rest))
- scm_wrong_num_args(scm_from_locale_string(procname ? (char *) procname : "unknown procedure"));
+ scm_wrong_num_args(scm_from_utf8_string(procname ? (char *) procname : "unknown procedure"));
*dest++ = SCM_CAR(rest);
rest = SCM_CDR(rest);
num_args_passed++;
@@ -486,7 +482,7 @@ SWIG_Guile_GetArgs (SCM *dest, SCM rest,
for (; i<optargs; i++)
*dest++ = SCM_UNDEFINED;
if (!SCM_NULLP(rest))
- scm_wrong_num_args(scm_from_locale_string(procname ? (char *) procname : "unknown procedure"));
+ scm_wrong_num_args(scm_from_utf8_string(procname ? (char *) procname : "unknown procedure"));
return num_args_passed;
}