Revision: 6144
Author: iratqq
Date: Sat Jan 23 23:51:13 2010
Log: * uim/expat.c (xml_start_element_handler_internal):
- New function.
(xml_start_element_handler):
- Call gc-guarded xml_start_element_handler_internal().
http://code.google.com/p/uim/source/detail?r=6144
Modified:
/trunk/uim/expat.c
=======================================
--- /trunk/uim/expat.c Tue Jan 20 18:11:15 2009
+++ /trunk/uim/expat.c Sat Jan 23 23:51:13 2010
@@ -53,6 +53,18 @@
XML_Parser parser;
uim_xml_userdata *data;
} uim_xml_ctx;
+
+static uim_lisp
+xml_start_element_handler_internal(const XML_Char *atts[])
+{
+ uim_lisp atts_ = uim_scm_null();
+
+ while (*atts != '\0') {
+ atts_ = CONS(CONS(MAKE_STR(*atts), MAKE_STR(*(atts + 1))), atts_);
+ atts += 2;
+ }
+ return atts_;
+}
static void
xml_start_element_handler(void *userData, const XML_Char *name, const
XML_Char *atts[])
@@ -60,12 +72,10 @@
uim_xml_userdata *data = (uim_xml_userdata *)userData;
if (data && data->start_) {
- uim_lisp atts_ = uim_scm_null();
-
- while (*atts != '\0') {
- atts_ = CONS(CONS(MAKE_STR(*atts), MAKE_STR(*(atts + 1))), atts_);
- atts += 2;
- }
+ uim_lisp atts_;
+
+ atts_ =
(uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)xml_start_element_handler_internal,
+ (void *)atts);
atts_ = uim_scm_callf("reverse", "o", atts_);