diff options
author | Hans de Graaff <hans@degraaff.org> | 2012-10-26 13:28:54 +0200 |
---|---|---|
committer | Hans de Graaff <hans@degraaff.org> | 2012-10-26 13:28:54 +0200 |
commit | cdae5ef475bfadf44a3759030aef2778cb471ef4 (patch) | |
tree | 2ba0784f171764227c22efb494ff4db73f0b7fbf /ext | |
parent | Import distributed 0.6.4 release. (diff) | |
download | gorg-cdae5ef475bfadf44a3759030aef2778cb471ef4.tar.gz gorg-cdae5ef475bfadf44a3759030aef2778cb471ef4.tar.bz2 gorg-cdae5ef475bfadf44a3759030aef2778cb471ef4.zip |
Fixes for Ruby 1.9.
Collected from the Gentoo patches for gorg 0.6.4 and patch
provided in https://bugs.gentoo.org/show_bug.cgi?id=395121
by Tomoh K.
Diffstat (limited to 'ext')
-rw-r--r-- | ext/gorg/xsl/xsl.c | 53 |
1 files changed, 30 insertions, 23 deletions
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"); |