git subrepo pull --force deps/lightrec
[pcsx_rearmed.git] / deps / libretro-common / include / formats / rxml.h
1 /* Copyright  (C) 2010-2020 The RetroArch team
2  *
3  * ---------------------------------------------------------------------------------------
4  * The following license statement only applies to this file (rxml.h).
5  * ---------------------------------------------------------------------------------------
6  *
7  * Permission is hereby granted, free of charge,
8  * to any person obtaining a copy of this software and associated documentation files (the "Software"),
9  * to deal in the Software without restriction, including without limitation the rights to
10  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
11  * and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  */
22 #ifndef __LIBRETRO_SDK_FORMAT_RXML_H__
23 #define __LIBRETRO_SDK_FORMAT_RXML_H__
24
25 #include <retro_common_api.h>
26
27 RETRO_BEGIN_DECLS
28
29 /* Total NIH. Very trivial "XML" implementation for use in RetroArch.
30  * Error checking is minimal. Invalid documents may lead to very
31  * buggy behavior, but memory corruption should never happen.
32  *
33  * Only parts of standard that RetroArch cares about is supported.
34  * Nothing more, nothing less. "Clever" XML documents will
35  * probably break the implementation.
36  *
37  * Do *NOT* try to use this for anything else. You have been warned.
38  */
39
40 typedef struct rxml_document rxml_document_t;
41
42 struct rxml_attrib_node
43 {
44    char *attrib;
45    char *value;
46    struct rxml_attrib_node *next;
47 };
48
49 typedef struct rxml_node
50 {
51    char *name;
52    char *data;
53    struct rxml_attrib_node *attrib;
54
55    struct rxml_node *children;
56    struct rxml_node *next;
57 } rxml_node_t;
58
59 rxml_document_t *rxml_load_document(const char *path);
60 rxml_document_t *rxml_load_document_string(const char *str);
61 void rxml_free_document(rxml_document_t *doc);
62
63 struct rxml_node *rxml_root_node(rxml_document_t *doc);
64
65 const char *rxml_node_attrib(struct rxml_node *node, const char *attrib);
66
67 RETRO_END_DECLS
68
69 #endif