diff options
author | Geert Janssens <janssens-geert@telenet.be> | 2013-12-13 17:48:26 +0100 |
---|---|---|
committer | Geert Janssens <janssens-geert@telenet.be> | 2014-02-05 12:17:16 +0100 |
commit | c6d03a6a9fd4af3bd22b9754f82abe0bd5555e84 (patch) | |
tree | aebef7e7a8d7bb9caebbc13c99430d7c3f4fa923 /Lib/guile/guile_scm_run.swg | |
parent | a54674eeca8c5173b915e6bd21de4ccd4298fcf5 (diff) | |
download | swig-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.swg | 22 |
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; } |