1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-12 06:41:13 +02:00

Updated example to use scm_to_locale_string

instead of roll-your-own scm_to_string.  Also showcase
scm_frame_free.
This commit is contained in:
Marius Vollmer 2004-08-10 14:16:34 +00:00
parent 91210d629f
commit 273167608a

View file

@ -1077,24 +1077,8 @@ char *foo (char *s1, char *s2);
/* SCM_FOO interfaces the C function FOO to the Scheme way of life. /* SCM_FOO interfaces the C function FOO to the Scheme way of life.
It takes care to free up all temporary strings in the case of It takes care to free up all temporary strings in the case of
non-local exits. non-local exits.
It uses SCM_TO_STRING as a helper procedure.
*/ */
char *
scm_to_string (SCM obj)
@{
if (SCM_STRINGP (obj))
@{
char *res = scm_malloc (SCM_STRING_LENGTH (obj)+1);
strcpy (res, SCM_STRING_CHARS (obj));
scm_remember_upto_here_1 (obj);
return res;
@}
else
scm_wrong_type_arg ("scm_to_string", 1, obj);
@}
SCM SCM
scm_foo (SCM s1, SCM s2) scm_foo (SCM s1, SCM s2)
@{ @{
@ -1102,11 +1086,17 @@ scm_foo (SCM s1, SCM s2)
scm_frame_begin (0); scm_frame_begin (0);
c_s1 = scm_to_string (s1); c_s1 = scm_to_locale_string (s1);
/* Call 'free (c_s1)' when the frame is left.
*/
scm_frame_unwind_handler (free, c_s1, SCM_F_WIND_EXPLICITLY); scm_frame_unwind_handler (free, c_s1, SCM_F_WIND_EXPLICITLY);
c_s2 = scm_to_string (s2); c_s2 = scm_to_locale_string (s2);
scm_frame_unwind_handler (free, c_s2, SCM_F_WIND_EXPLICITLY);
/* Same as above, but more concisely.
*/
scm_frame_free (c_s2);
c_res = foo (c_s1, c_s2); c_res = foo (c_s1, c_s2);
if (c_res == NULL) if (c_res == NULL)
@ -1114,7 +1104,7 @@ scm_foo (SCM s1, SCM s2)
scm_frame_end (); scm_frame_end ();
return scm_take0str (res); return scm_take_locale_string (res);
@} @}
@end example @end example