summaryrefslogtreecommitdiff
blob: d155ffaad2fba9b08cd8891e1cea6575baa89af4 (plain)
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
diff --git a/ext/gorg/xsl/xsl.c b/ext/gorg/xsl/xsl.c
index d8d40b6..58ffc49 100644
--- a/ext/gorg/xsl/xsl.c
+++ b/ext/gorg/xsl/xsl.c
@@ -20,6 +20,13 @@
 
 #include "xsl.h"
 
+#ifndef RARRAY_LEN
+#define RARRAY_LEN(a) RARRAY(a)->len
+#endif
+#ifndef RSTRING_LEN
+#define RSTRING_LEN(str) RSTRING(str)->len
+#endif
+
 /*
  * Copied from xmlIO.c from libxml2
  */
@@ -156,8 +163,8 @@ void *XRootOpen (const char *filename, const char* rw) {
   
   if (g_xroot != Qnil)
   {
-    rbxrootPtr = RSTRING(g_xroot)->ptr;
-    rbxrootLen = RSTRING(g_xroot)->len;
+    rbxrootPtr = RSTRING_PTR(g_xroot);
+    rbxrootLen = RSTRING_LEN(g_xroot);
   }
   path = (char *) malloc((strlen(filename) + rbxrootLen + 1) * sizeof(char));
   if (path == NULL)
@@ -284,10 +291,10 @@ void xslMessageHandler(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
  */
 int looksLikeXML(VALUE v)
 {
-  return    (RSTRING(v)->len > FILENAME_MAX)
-         || (!strncmp(RSTRING(v)->ptr, "<?xml", 5))
-         || (!strncmp(RSTRING(v)->ptr, "<?xsl", 5))
-         || (strstr(RSTRING(v)->ptr, "\n"));
+  return    (RSTRING_LEN(v) > FILENAME_MAX)
+         || (!strncmp(RSTRING_PTR(v), "<?xml", 5))
+         || (!strncmp(RSTRING_PTR(v), "<?xsl", 5))
+         || (strstr(RSTRING_PTR(v), "\n"));
 //            We could also try with " " but some are stupid enough to use spaces in filenames
 }
  
@@ -456,7 +463,7 @@ VALUE check_params(VALUE xparams)
     // empty array => Qnil
     // array.length==2, could be 2 params [[p1,v1],[p2,v2]] or 1 param [p,v]
     // if both items are arrays, we have a list of params, otherwise we have a single param
-    len = RARRAY(ary)->len;
+    len = RARRAY_LEN(ary);
     switch (len)
     {
       case 0:
@@ -522,17 +529,17 @@ char *build_params(VALUE rbparams)
 
   // Compute total block size in one go
   tempval = rb_funcall(rbparams, id.to_s, 0);
-  ret = malloc (  ((RARRAY(rbparams)->len)*2+1) * sizeof(void *) // Two pointers per [param, value] + 1 NULL
-                + (RARRAY(rbparams)->len) * 4 * sizeof(char)     // Quotes around values + 1 NULL per value
-                + (RSTRING(tempval)->len) * sizeof(char)         // Size of param names & values
+  ret = malloc (  ((RARRAY_LEN(rbparams))*2+1) * sizeof(void *) // Two pointers per [param, value] + 1 NULL
+                + (RARRAY_LEN(rbparams)) * 4 * sizeof(char)     // Quotes around values + 1 NULL per value
+                + (RSTRING_LEN(tempval)) * sizeof(char)         // Size of param names & values
                   );
   if ( ret==NULL)
     return NULL; // out of memory
 
   paramPtr = (char **)ret;
-  paramData = ret + ((RARRAY(rbparams)->len)*2+1) * sizeof(void *);
+  paramData = ret + ((RARRAY_LEN(rbparams))*2+1) * sizeof(void *);
   // Copy each param name & value
-  for (i=0; i<RARRAY(rbparams)->len; ++i)
+  for (i=0; i<RARRAY_LEN(rbparams); ++i)
   {
     tempval = rb_ary_entry(rbparams, i); // ith param, i.e. [name, value]
     
@@ -542,9 +549,9 @@ char *build_params(VALUE rbparams)
     // Add param name address to list of pointers
     *paramPtr++ = paramData;
     // Copy param name into data block
-    strcpy(paramData, RSTRING(tempstr)->ptr);
+    strcpy(paramData, RSTRING_PTR(tempstr));
     // Move data pointer after inserted string
-    paramData += 1+ RSTRING(tempstr)->len;
+    paramData += 1+ RSTRING_LEN(tempstr);
     
     // 2. Copy param value, quoting it with ' or "
     
@@ -552,7 +559,7 @@ char *build_params(VALUE rbparams)
     // Don't bother if param is a mix of ' and ", users should know better :-)
     // or it's been checked already. Here we expect params to be OK.
     quotingChar = '"';
-    if ( strchr(RSTRING(tempstr)->ptr, quotingChar) )
+    if ( strchr(RSTRING_PTR(tempstr), quotingChar) )
       quotingChar = '\''; // Use ' instead of "
 
     // Add para value address in list of pointers
@@ -561,9 +568,9 @@ char *build_params(VALUE rbparams)
     // Start with quoting character
     *paramData++ = quotingChar;
     // Copy value
-    strcpy(paramData, RSTRING(tempstr)->ptr);
+    strcpy(paramData, RSTRING_PTR(tempstr));
     // Move data pointer after inserted string
-    paramData += RSTRING(tempstr)->len;
+    paramData += RSTRING_LEN(tempstr);
     // Close quote
     *paramData++ = quotingChar;
     // End string with \0
@@ -593,13 +600,13 @@ VALUE xsl_process_real(VALUE none, VALUE self)
   if (NIL_P(rbxml))
     rb_raise(rb_eArgError, "No XML data");
   rbxml = StringValue(rbxml);
-  if (!RSTRING(rbxml)->len)
+  if (!RSTRING_LEN(rbxml))
     rb_raise(rb_eArgError, "No XML data");
   rbxsl = rb_iv_get(self, "@xsl");
   if (NIL_P(rbxsl))
     rb_raise(rb_eArgError, "No Stylesheet");
   rbxsl = StringValue(rbxsl);
-  if (!RSTRING(rbxsl)->len)
+  if (!RSTRING_LEN(rbxsl))
     rb_raise(rb_eArgError, "No Stylesheet");
   rbxroot = rb_iv_get(self, "@xroot");
   rbparams = check_params(rb_iv_get(self, "@xparams"));
@@ -625,7 +632,7 @@ VALUE xsl_process_real(VALUE none, VALUE self)
   // Parse XSL
   if (looksLikeXML(rbxsl))
   {
-    myPointers.docxsl = xmlParseMemory(RSTRING(rbxsl)->ptr, RSTRING(rbxsl)->len);
+    myPointers.docxsl = xmlParseMemory(RSTRING_PTR(rbxsl), RSTRING_LEN(rbxsl));
 //    myPointers.docxsl = xmlReadMemory(RSTRING(rbxsl)->ptr, RSTRING(rbxsl)->len, ".", NULL, 0);
     if (myPointers.docxsl == NULL)
     {
@@ -641,7 +648,7 @@ VALUE xsl_process_real(VALUE none, VALUE self)
   }
   else // xsl is a filename
   {
-    myPointers.xsl = xsltParseStylesheetFile(RSTRING(rbxsl)->ptr);
+    myPointers.xsl = xsltParseStylesheetFile(RSTRING_PTR(rbxsl));
     if (myPointers.xsl == NULL)
     {
       my_raise(self, &myPointers, rb_eSystemCallError, "XSL file loading error");
@@ -652,7 +659,7 @@ VALUE xsl_process_real(VALUE none, VALUE self)
   // Parse XML 
   if (looksLikeXML(rbxml))
   {
-    myPointers.docxml = xmlReadMemory(RSTRING(rbxml)->ptr, RSTRING(rbxml)->len, ".", NULL, xmlOptions);
+    myPointers.docxml = xmlReadMemory(RSTRING_PTR(rbxml), RSTRING_LEN(rbxml), ".", NULL, xmlOptions);
     if (myPointers.docxml == NULL)
     {
       my_raise(self, &myPointers, rb_eSystemCallError, "XML parsing error");
@@ -661,7 +668,7 @@ VALUE xsl_process_real(VALUE none, VALUE self)
   }
   else // xml is a filename
   {
-	  myPointers.docxml = xmlReadFile(RSTRING(rbxml)->ptr, NULL, xmlOptions);
+	  myPointers.docxml = xmlReadFile(RSTRING_PTR(rbxml), NULL, xmlOptions);
     if (myPointers.docxml == NULL)
     {
       my_raise(self, &myPointers, rb_eSystemCallError, "XML file parsing error");