1 /* 2 * Copyright (c) 2009, 2010 Aggelos Economopoulos. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 3. Neither the name of The DragonFly Project nor the names of its 15 * contributors may be used to endorse or promote products derived 16 * from this software without specific, prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 24 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 26 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 28 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32 #ifndef _EVTRANALYZE_XML_H_ 33 #define _EVTRANALYZE_XML_H_ 34 35 #include <stdio.h> 36 #include <sys/queue.h> 37 38 39 typedef struct xml_attribute { 40 const char *name; 41 const char *value; 42 STAILQ_ENTRY(xml_attribute) next; 43 } *xml_attribute_t; 44 45 typedef struct xml_element { 46 const char *name; 47 const char *value; 48 STAILQ_HEAD(, xml_attribute) attributes; 49 STAILQ_ENTRY(xml_element) link; 50 } *xml_element_t; 51 52 typedef struct xml_document { 53 FILE *file; 54 STAILQ_HEAD(, xml_element) open_elems; 55 int nr_open; 56 const char *errmsg; 57 } *xml_document_t; 58 59 static inline 60 void 61 xml_elem_init(xml_element_t el, const char *name) 62 { 63 el->name = name; 64 el->value = NULL; 65 STAILQ_INIT(&el->attributes); 66 } 67 68 static inline 69 void 70 xml_elem_set_value(xml_element_t el, const char *value) 71 { 72 el->value = value; 73 } 74 75 static inline 76 void 77 xml_attribute_init(xml_attribute_t at, const char *name, const char *value) 78 { 79 at->name = name; 80 at->value = value; 81 } 82 83 static inline 84 void 85 xml_attribute_set_value(xml_attribute_t at, const char *value) 86 { 87 at->value = value; 88 } 89 90 static inline 91 void 92 xml_elem_set_attribute(xml_element_t el, xml_attribute_t at) 93 { 94 STAILQ_INSERT_TAIL(&el->attributes, at, next); 95 } 96 97 98 xml_document_t xml_document_create(const char *); 99 int xml_document_close(xml_document_t); 100 int xml_elem_closed(xml_document_t, xml_element_t); 101 int xml_elem_begin(xml_document_t, xml_element_t); 102 int xml_elem_close(xml_document_t, xml_element_t); 103 104 #endif /* !_EVTRANALYZE_XML_H_ */ 105