result_t XmlElement::toString(exlib::string& retVal) { retVal = "<"; exlib::string tagName(m_tagName); if (!m_isXml) qstrlwr(&tagName[0]); if (m_prefix.empty()) { if (!m_namespaceURI.empty()) { bool skip_def_ns = false; if (m_parent) { int32_t type; m_parent->get_nodeType(type); if (type == xml_base::_ELEMENT_NODE) { exlib::string def_ns; ((XmlElement*)m_parent->m_node)->get_defaultNamespace(def_ns); if (def_ns == m_namespaceURI) skip_def_ns = true; } } if (!skip_def_ns) setAttribute("xmlns", m_namespaceURI); } retVal.append(tagName); } else { fix_prefix(m_namespaceURI, m_prefix); retVal.append(m_prefix); retVal += ':'; retVal.append(m_localName); } exlib::string strAttr; m_attrs->toString(strAttr); retVal.append(strAttr); if (m_childs->hasChildNodes()) { exlib::string strChild; m_childs->toString(strChild); retVal += '>'; retVal.append(strChild); retVal.append("</"); retVal.append(tagName); retVal += '>'; } else retVal.append("/>"); return 0; }
SCM scm_mmr_path_fix(SCM target) #define FUNC_NAME "path-fix" { char *path = NULL; char *fixed = NULL; // fixed path char *tmp = NULL; int path_len = 0; int bi = 0; int pi = 0; SCM ret; SCM_VALIDATE_STRING(1 ,target); scm_dynwind_begin(0); path = scm_to_locale_string(target); scm_dynwind_free(path); if(!strstr(path ,"/..")) { // no relative path ret = target; goto end; } path_len = strlen(path); path_len = path_len>MAX_PATH_LEN? MAX_PATH_LEN : path_len; fixed = (char *)malloc(path_len+1); fixed[0] = '\n'; // sentinal while(get_dir(path ,fixed+1 ,&pi ,&bi)) {} /* NOTE: The result won't contain '/' at the end, * because we'll append *path '/' filename* finally. */ tmp = fix_prefix(fixed+1); ret = scm_from_locale_string(tmp); free(fixed); fixed = NULL; tmp = NULL; end: scm_dynwind_end(); return ret; }