From cdae5ef475bfadf44a3759030aef2778cb471ef4 Mon Sep 17 00:00:00 2001 From: Hans de Graaff Date: Fri, 26 Oct 2012 13:28:54 +0200 Subject: 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. --- ext/gorg/xsl/xsl.c | 53 ++++++++++++++++++++++++++++++----------------------- lib/gorg/base.rb | 4 ++-- lib/gorg/cache.rb | 14 ++++++++++++-- 3 files changed, 44 insertions(+), 27 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, "ptr, "ptr, "\n")); + return (RSTRING_LEN(v) > FILENAME_MAX) + || (!strncmp(RSTRING_PTR(v), " 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; ilen; ++i) + for (i=0; iptr); + 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"); diff --git a/lib/gorg/base.rb b/lib/gorg/base.rb index c3851a9..44dab99 100644 --- a/lib/gorg/base.rb +++ b/lib/gorg/base.rb @@ -89,7 +89,7 @@ module Gorg } else # Scan xml for stylesheet names - path.each { |line| styles << $1 if regexp.match(line) } + path.each_line { |line| styles << $1 if regexp.match(line) } end # Use default stylesheet if none were found in the doc styles << $Config["defaultXSL"] if styles.length == 0 @@ -338,7 +338,7 @@ module Gorg private def parseConfig(h, config) - config.each {|line| + config.each_line {|line| line.strip! next if line.length == 0 or line[0,1] == '#' # Skip blank lines and comments raise "Invalid Configuration (#{line})" unless line =~ /^([a-zA-Z_]*)\s*=\s*/ diff --git a/lib/gorg/cache.rb b/lib/gorg/cache.rb index 543b6a2..3229e35 100644 --- a/lib/gorg/cache.rb +++ b/lib/gorg/cache.rb @@ -22,7 +22,13 @@ # . a list of parameters as received by a webserver e.g. # . a list of files it depends on -require "parsedate" +begin + require "parsedate" + $haveparsedate = true +rescue LoadError + require "time" + $haveparsedate = false +end require "fileutils" require "find" require "digest" @@ -106,7 +112,11 @@ module Cache fst = File.stat(f) raise "Size of #{f} has changed from #{fst.size} to #{s.to_i}" unless fst.size == s.to_i - raise "Timestamp of #{f} has changed" unless Time.utc(*ParseDate.parsedate(d)) == fst.mtime.utc + if $haveparsedate + raise "Timestamp of #{f} has changed" unless Time.utc(*ParseDate.parsedate(d)) == fst.mtime.utc + else + raise "Timestamp of #{f} has changed" unless Time.parse(d) == fst.mtime.utc + end end mline = meta.shift end -- cgit v1.2.3-65-gdbad