char * xml_node_get_base64_text(struct xml_node_ctx *ctx, xml_node_t *node, int *ret_len) { char *txt; unsigned char *ret; size_t len; txt = xml_node_get_text(ctx, node); if (txt == NULL) return NULL; ret = base64_decode((unsigned char *) txt, strlen(txt), &len); if (ret_len) *ret_len = len; xml_node_get_text_free(ctx, txt); if (ret == NULL) return NULL; txt = os_malloc(len + 1); if (txt == NULL) { os_free(ret); return NULL; } os_memcpy(txt, ret, len); txt[len] = '\0'; return txt; }
static void extract_work(xmlNodePtr entry, gchar ** org) { while (entry) { if (!xmlStrcmp(entry->name, CXMLCHARP("Organization"))) { *org = xml_node_get_text(entry); return; } entry = entry->next; } }
static void extract_data(xmlNodePtr entry, gchar ** first_name, gchar ** last_name, gchar ** nick_name) { gchar *title = NULL; gchar *prefix = NULL; gchar *first = NULL; gchar *middle = NULL; GString *_first_name = NULL; while (entry) { if (!xmlStrcmp(entry->name, CXMLCHARP("FirstName"))) first = xml_node_get_text(entry); else if (!xmlStrcmp(entry->name, CXMLCHARP("MiddleName"))) middle = xml_node_get_text(entry); else if (!xmlStrcmp(entry->name, CXMLCHARP("Title"))) title = xml_node_get_text(entry); else if (!xmlStrcmp(entry->name, CXMLCHARP("NamePrefix"))) prefix = xml_node_get_text(entry); else if (!xmlStrcmp(entry->name, CXMLCHARP("LastName"))) *last_name = xml_node_get_text(entry); else if (!xmlStrcmp(entry->name, CXMLCHARP("NickName"))) *nick_name = xml_node_get_text(entry); entry = entry->next; } /* construct first name */ if (title) _first_name = g_string_new(title); if (prefix) { if (_first_name) { _first_name = g_string_append_c(_first_name, ' '); _first_name = g_string_append(_first_name, prefix); } else _first_name = g_string_new(prefix); } if (first) { if (_first_name) { _first_name = g_string_append_c(_first_name, ' '); _first_name = g_string_append(_first_name, first); } else _first_name = g_string_new(first); } if (middle) { if (_first_name) { _first_name = g_string_append_c(_first_name, ' '); _first_name = g_string_append(_first_name, middle); } else _first_name = g_string_new(middle); } if (_first_name) *first_name = g_string_free(_first_name, FALSE); else *first_name = NULL; }
static void extract_net(xmlNodePtr entry, GList ** mail_addrs) { while (entry) { gchar *uri_type = NULL; gchar *mail_addr; if (!xmlStrcmp(entry->name, CXMLCHARP("Uri")) && g_strcmp0(uri_type = xml_node_get_attr(entry, CXMLCHARP("type")), "email") == 0 && (mail_addr = xml_node_get_text(entry)) != NULL) *mail_addrs = g_list_prepend(*mail_addrs, mail_addr); g_free(uri_type); entry = entry->next; } }