diff options
author | Matt Colyer | 2008-07-29 10:13:37 -0700 |
---|---|---|
committer | Matt Colyer | 2008-07-29 10:13:37 -0700 |
commit | 3dc130f3049e250b2d5c0b48af1995fda2fad3d4 (patch) | |
tree | 9d801459ef68e83a0d4ca038c0589d8e4c8aa2b2 /plist.c | |
parent | 6039e5bbfc36aa5210295c38f251ed178ce5adbb (diff) | |
download | libplist-3dc130f3049e250b2d5c0b48af1995fda2fad3d4.tar.gz libplist-3dc130f3049e250b2d5c0b48af1995fda2fad3d4.tar.bz2 |
Autotooled the project with very basic versioning support.
Diffstat (limited to 'plist.c')
-rw-r--r-- | plist.c | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/plist.c b/plist.c deleted file mode 100644 index cbd6302..0000000 --- a/plist.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * plist.c - * Builds plist XML structures. - * Written by FxChiP - */ - -#include <libxml/parser.h> -#include <libxml/tree.h> -#include <string.h> -#include "plist.h" - -const char *plist_base = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\ -<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n\ -<plist version=\"1.0\">\n\ -</plist>\0"; - -xmlDocPtr new_plist() { - char *plist = strdup(plist_base); - xmlDocPtr plist_xml = xmlReadMemory(plist, strlen(plist), NULL, NULL, 0); - if (!plist_xml) return NULL; - free(plist); - return plist_xml; -} - -void free_plist(xmlDocPtr plist) { - if (!plist) return; - xmlFreeDoc(plist); -} - -xmlNode *add_child_to_plist(xmlDocPtr plist, const char *name, const char *content, xmlNode *to_node, int depth) { - if (!plist) return NULL; - int i = 0; - xmlNode *child; - if (!to_node) to_node = xmlDocGetRootElement(plist); - for (i = 0; i < depth; i++) { - xmlNodeAddContent(to_node, "\t"); - } - child = xmlNewChild(to_node, NULL, name, content); - xmlNodeAddContent(to_node, "\n"); - return child; -} - -xmlNode *add_key_str_dict_element(xmlDocPtr plist, xmlNode *dict, const char *key, const char *value, int depth) { - xmlNode *keyPtr; - keyPtr = add_child_to_plist(plist, "key", key, dict, depth); - add_child_to_plist(plist, "string", value, dict, depth); - return keyPtr; -} - -char **read_dict_element_strings(xmlNode *dict) { - // reads a set of keys and strings into an array where each even number is a key and odd numbers are values. - // if the odd number is \0, that's the end of the list. - char **return_me = NULL, **old = NULL; - int current_length = 0; - int current_pos = 0; - xmlNode *dict_walker; - - for (dict_walker = dict->children; dict_walker; dict_walker = dict_walker->next) { - if (!xmlStrcmp(dict_walker->name, "key")) { - current_length += 2; - old = return_me; - return_me = realloc(return_me, sizeof(char*) * current_length); - if (!return_me) { - free(old); - return NULL; - } - return_me[current_pos++] = xmlNodeGetContent(dict_walker); - return_me[current_pos++] = xmlNodeGetContent(dict_walker->next->next); - } - } - - // one last thing... - old = return_me; - return_me = realloc(return_me, sizeof(char*) * current_length+1); - return_me[current_pos] = strdup(""); - - return return_me; -} - -void free_dictionary(char **dictionary) { - if (!dictionary) return; - int i = 0; - - for (i = 0; strcmp(dictionary[i], ""); i++) { - free(dictionary[i]); - } - - free(dictionary[i]); - free(dictionary); -} - |