static char *lookup_common(struct sdtid *s, const char *name) { char *defname = NULL, *ret; ret = __lookup_common(s, s->tkn_node, name); if (ret) return ret; /* try Def<FOO> from <TKNHeader> section */ if (asprintf(&defname, "Def%s", name) < 0) { s->error = ERR_NO_MEMORY; return NULL; } ret = __lookup_common(s, s->header_node, defname); free(defname); if (ret) return ret; return __lookup_common(s, s->header_node, name); }
static char *__lookup_common(struct sdtid *s, xmlNode *node, const char *name) { if (s->error != ERR_NONE || !node) return NULL; for (node = node->children; node; node = node->next) { char *val = __lookup_common(s, node, name); if (val) return val; if (xmlnode_is_named(node, name)) { val = (char *)xmlNodeGetContent(node); if (!val) s->error = ERR_NO_MEMORY; return val; } } return NULL; }