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_);

Reply via email to