1 /* PR middle-end/52306 */
2 
3 struct xmlNs {
4     const unsigned char *prefix;
5 };
6 
7 struct xmlNode {
8     const unsigned char *name;
9     struct xmlNs *ns;
10     struct xmlNs *nsDef;
11 };
12 
13 struct xsltTemplate {
14     const unsigned char *name;
15     int inheritedNsNr;
16     void *inheritedNs;
17 };
18 
19 struct xsltTemplate *xsltNewTemplate(void);
20 void xsltGetQNameURI(unsigned char**);
21 long xmlMalloc(unsigned long);
22 void xsltGenericDebug(void);
23 int xmlStrEqual(const unsigned char*, const unsigned char*);
24 
xsltGetInheritedNsList(struct xsltTemplate * template,struct xmlNode * node)25 static void xsltGetInheritedNsList(
26     struct xsltTemplate *template,
27     struct xmlNode *node)
28 {
29     struct xmlNs *cur;
30     struct xmlNs **ret;
31     int nbns = 0;
32     int maxns = 10;
33     int i;
34 
35     if (template == 0
36 	|| template->inheritedNsNr != 0
37 	|| template->inheritedNs != 0)
38 	return;
39 
40     while (node != 0) {
41 	cur = node->nsDef;
42 	ret = (struct xmlNs**) xmlMalloc((maxns + 1) * sizeof(struct xmlNs*));
43 	for (i = 0; i < nbns; i++)
44 	    if (cur->prefix == ret[i]->prefix
45 		|| xmlStrEqual(cur->prefix, 0))
46 		break;
47 
48 	if (i >= nbns) {
49 	    if (nbns >= maxns)
50 		return;
51 	    ret[nbns++] = cur;
52 	}
53     }
54 }
55 
56 static void
xsltParseStylesheetTemplate(struct xmlNode * template)57 xsltParseStylesheetTemplate(struct xmlNode *template)
58 {
59     struct xsltTemplate *ret;
60     unsigned char *prop;
61 
62     ret = xsltNewTemplate();
63     if (ret == 0)
64 	return;
65     xsltGetInheritedNsList(ret, template);
66     xsltGenericDebug();
67     xsltGetQNameURI(&prop);
68     xmlStrEqual(0, ret->name);
69 }
70 
xsltParseStylesheetTop(struct xmlNode * cur)71 void xsltParseStylesheetTop(struct xmlNode *cur)
72 {
73     xmlStrEqual(0, 0);
74 
75     while (cur != 0) {
76 	if (xmlStrEqual(cur->name, 0))
77 	    ;
78 	else if (xmlStrEqual(cur->name, 0))
79 	    ;
80 	else if (xmlStrEqual(cur->name, 0))
81 	    xsltParseStylesheetTemplate(cur);
82     }
83 }
84 
85