prepare for the release of rrdtool-1.3.1
[rrdtool.git] / bindings / perl-shared / RRDs.xs
index f7e5360..b2a70d9 100644 (file)
@@ -10,7 +10,25 @@ extern "C" {
 }
 #endif
 
+/*
+ * rrd_tool.h includes config.h, but at least on Ubuntu Breezy Badger
+ * 5.10 with gcc 4.0.2, the C preprocessor picks up Perl's config.h
+ * which is included from the Perl includes and never reads rrdtool's
+ * config.h.  Without including rrdtool's config.h, this module does
+ * not compile, so include it here with an explicit path.
+ *
+ * Because rrdtool's config.h redefines VERSION which is originally
+ * set via Perl's Makefile.PL and passed down to the C compiler's
+ * command line, save the original value and reset it after the
+ * includes.
+ */
+#define VERSION_SAVED VERSION
+#undef VERSION
+#include "../../rrd_config.h"
 #include "../../src/rrd_tool.h"
+#undef VERSION
+#define VERSION VERSION_SAVED
+#undef VERSION_SAVED
 
 /* perl 5.004 compatibility */
 #if PERLPATCHLEVEL < 5 
@@ -81,6 +99,10 @@ extern "C" {
                        hvs(newSVpv(data->value.u_str,0)); \
                        rrd_freemem(data->value.u_str); \
                        break; \
+                   case RD_I_BLO: \
+                       hvs(newSVpv(data->value.u_blo.ptr,data->value.u_blo.size)); \
+                       rrd_freemem(data->value.u_blo.ptr); \
+                       break; \
                    } \
                    rrd_freemem(data->key); \
                    data = data->next; \
@@ -285,20 +307,20 @@ rrd_times(start, end)
          char *start
          char *end
        PREINIT:
-               struct  rrd_time_value start_tv, end_tv;
+               rrd_time_value_t start_tv, end_tv;
                char    *parsetime_error = NULL;
                time_t  start_tmp, end_tmp;
        PPCODE:
                rrd_clear_error();
-               if( (parsetime_error = parsetime( start, &start_tv))) {
-                       rrd_set_error( "start time: %s", parsetime_error);
+               if ((parsetime_error = rrd_parsetime(start, &start_tv))) {
+                       rrd_set_error("start time: %s", parsetime_error);
                        XSRETURN_UNDEF;
                }
-               if( (parsetime_error = parsetime( end, &end_tv))) {
-                       rrd_set_error( "end time: %s", parsetime_error);
+               if ((parsetime_error = rrd_parsetime(end, &end_tv))) {
+                       rrd_set_error("end time: %s", parsetime_error);
                        XSRETURN_UNDEF;
                }
-               if( proc_start_end( &start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
+               if (rrd_proc_start_end(&start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
                        XSRETURN_UNDEF;
                }
                EXTEND(sp,2);
@@ -367,7 +389,7 @@ SV*
 rrd_info(...)
        PROTOTYPE: @    
        PREINIT:
-               info_t *data,*save;
+               rrd_info_t *data,*save;
                 int i;
                 char **argv;
                HV *hash;
@@ -380,7 +402,7 @@ SV*
 rrd_updatev(...)
        PROTOTYPE: @    
        PREINIT:
-               info_t *data,*save;
+               rrd_info_t *data,*save;
                 int i;
                 char **argv;
                HV *hash;
@@ -389,6 +411,19 @@ rrd_updatev(...)
     OUTPUT:
           RETVAL
 
+SV*
+rrd_graphv(...)
+       PROTOTYPE: @    
+       PREINIT:
+               rrd_info_t *data,*save;
+                int i;
+                char **argv;
+               HV *hash;
+       CODE:
+               rrdinfocode(rrd_graph_v);       
+    OUTPUT:
+          RETVAL
+
 int
 rrd_dump(...)
        PROTOTYPE: @