File: ncxml_ezxml.c

package info (click to toggle)
netcdf-parallel 1%3A4.9.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 116,192 kB
  • sloc: ansic: 279,265; sh: 14,143; cpp: 5,971; yacc: 2,612; makefile: 2,075; lex: 1,218; javascript: 280; xml: 173; awk: 2
file content (121 lines) | stat: -rw-r--r-- 2,179 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/* Copyright 2018-2018 University Corporation for Atmospheric
   Research/Unidata. */

#include <stdlib.h>
#include <string.h>
#include "ncxml.h"
#include "ezxml.h"

#ifndef nulldup
#define nulldup(s) ((s)?strdup(s):NULL)
#endif

static int ncxml_initialized = 0;

void
ncxml_initialize(void)
{
    ncxml_initialized = 1;
}

void
ncxml_finalize(void)
{
    ncxml_initialized = 0;
}

ncxml_doc_t
ncxml_parse(char* contents, size_t len)
{
    return (ncxml_t)ezxml_parse_str(contents,len);
}

void
ncxml_free(ncxml_doc_t doc0)
{
    ezxml_t doc = (ezxml_t)doc0;
    ezxml_free(doc);
}

ncxml_t
ncxml_root(ncxml_doc_t doc0)
{
    ezxml_t doc = (ezxml_t)doc0;
    return (ncxml_t)doc;
}

const char*
ncxml_name(ncxml_t xml0)
{
    ezxml_t xml = (ezxml_t)xml0;    
    return (xml?xml->name:NULL);
}

char*
ncxml_attr(ncxml_t xml0, const char* key)
{
    ezxml_t xml = (ezxml_t)xml0;
    return nulldup(ezxml_attr(xml,key));
}

ncxml_t
ncxml_child(ncxml_t xml0, const char* name)
{
    ezxml_t xml = (ezxml_t)xml0;
    return (ncxml_t)ezxml_child(xml,name);
}

ncxml_t
ncxml_next(ncxml_t xml0, const char* name)
{
    ezxml_t xml = (ezxml_t)xml0;
    (void)name; /* unused */
    return (ncxml_t)ezxml_next(xml);
}

char*
ncxml_text(ncxml_t xml0)
{
    ezxml_t xml = (ezxml_t)xml0;
    return (xml?strdup(xml->txt):strdup(""));
}

/* Nameless versions of child and next */
ncxml_t
ncxml_child_first(ncxml_t xml0)
{
    ezxml_t xml = (ezxml_t)xml0;
    return (xml?xml->child:NULL);
}

ncxml_t
ncxml_child_next(ncxml_t xml0)
{
    ezxml_t xml = (ezxml_t)xml0;
    return (xml?xml->ordered:NULL);
}

int
ncxml_attr_pairs(ncxml_t xml0, char*** pairsp)
{
    char** pairs = NULL;
    ezxml_t xml = (ezxml_t)xml0;
    if(xml) {
        /* First count */
        int i,count = 0;
        const char** p = (const char**)xml->attr;
	for(count=0;*p;p+=2)
	    count++; /* pair count */
        pairs = (char**)malloc(sizeof(char*)*((2*count)+1));
	if(pairs == NULL) return 0;
        p = (const char**)xml->attr;
	for(i=0;*p;p+=2,i+=2) {
	    pairs[i] = strdup(p[0]);
    	    pairs[i+1] = strdup(p[1]);
	}
	pairs[2*count] = NULL;
	if(pairsp) *pairsp = pairs;
	return 1;
    }
    return 0;
}