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
|
$NetBSD: patch-af,v 1.1 2007/02/01 18:01:39 drochner Exp $
--- libxslt/pattern.c.orig 2007-02-01 14:36:48.000000000 +0100
+++ libxslt/pattern.c
@@ -2066,9 +2066,10 @@ xsltCompilePattern(const xmlChar *patter
int
xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur,
const xmlChar *mode, const xmlChar *modeURI) {
- xsltCompMatchPtr pat, list, *top = NULL, next;
+ xsltCompMatchPtr pat, list, *help, next;
const xmlChar *name = NULL;
float priority; /* the priority */
+ void *top = NULL;
if ((style == NULL) || (cur == NULL) || (cur->match == NULL))
return(-1);
@@ -2097,24 +2098,24 @@ xsltAddTemplate(xsltStylesheetPtr style,
if (pat->steps[0].value != NULL)
name = pat->steps[0].value;
else
- top = (xsltCompMatchPtr *) &(style->attrMatch);
+ top = &(style->attrMatch);
break;
case XSLT_OP_CHILD:
case XSLT_OP_PARENT:
case XSLT_OP_ANCESTOR:
- top = (xsltCompMatchPtr *) &(style->elemMatch);
+ top = &(style->elemMatch);
break;
case XSLT_OP_ROOT:
- top = (xsltCompMatchPtr *) &(style->rootMatch);
+ top = &(style->rootMatch);
break;
case XSLT_OP_KEY:
- top = (xsltCompMatchPtr *) &(style->keyMatch);
+ top = &(style->keyMatch);
break;
case XSLT_OP_ID:
/* TODO optimize ID !!! */
case XSLT_OP_NS:
case XSLT_OP_ALL:
- top = (xsltCompMatchPtr *) &(style->elemMatch);
+ top = &(style->elemMatch);
break;
case XSLT_OP_END:
case XSLT_OP_PREDICATE:
@@ -2130,20 +2131,20 @@ xsltAddTemplate(xsltStylesheetPtr style,
if (pat->steps[0].value != NULL)
name = pat->steps[0].value;
else
- top = (xsltCompMatchPtr *) &(style->piMatch);
+ top = &(style->piMatch);
break;
case XSLT_OP_COMMENT:
- top = (xsltCompMatchPtr *) &(style->commentMatch);
+ top = &(style->commentMatch);
break;
case XSLT_OP_TEXT:
- top = (xsltCompMatchPtr *) &(style->textMatch);
+ top = &(style->textMatch);
break;
case XSLT_OP_ELEM:
case XSLT_OP_NODE:
if (pat->steps[0].value != NULL)
name = pat->steps[0].value;
else
- top = (xsltCompMatchPtr *) &(style->elemMatch);
+ top = &(style->elemMatch);
break;
}
if (name != NULL) {
@@ -2182,13 +2183,14 @@ xsltAddTemplate(xsltStylesheetPtr style,
}
}
} else if (top != NULL) {
- list = *top;
+ help = top;
+ list = *help;
if (list == NULL) {
- *top = pat;
+ *help = pat;
pat->next = NULL;
} else if (list->priority <= pat->priority) {
pat->next = list;
- *top = pat;
+ *help = pat;
} else {
while (list->next != NULL) {
if (list->next->priority <= pat->priority)
|