make ruby bindings compile with newer ruby versions ... fix for #217
[rrdtool.git] / bindings / ruby / main.c
index d2a7ace..4942277 100644 (file)
@@ -4,6 +4,7 @@
 
 #include <unistd.h>
 #include <ruby.h>
+#include <math.h>
 #include "../../src/rrd_tool.h"
 
 typedef struct string_arr_t {
@@ -19,6 +20,11 @@ typedef int (
     int argc,
     char **argv);
 
+typedef rrd_info_t *(
+    *RRDINFOFUNC) (
+    int argc,
+    char **argv);
+
 #define RRD_CHECK_ERROR  \
     if (rrd_test_error()) \
       rb_raise(rb_eRRDError, rrd_get_error()); \
@@ -32,7 +38,7 @@ string_arr string_arr_new(
     int       i;
 
     Check_Type(rb_strings, T_ARRAY);
-    a.len = RARRAY(rb_strings)->len + 1;
+    a.len = RARRAY_LEN(rb_strings) + 1;
 
     a.strings = malloc(a.len * sizeof(char *));
     a.strings[0] = "dummy"; /* first element is a dummy element */
@@ -138,11 +144,18 @@ VALUE rb_rrd_update(
     return rrd_call(rrd_update, args);
 }
 
+VALUE rb_rrd_flush(
+    VALUE self,
+    VALUE args)
+{
+    return rrd_call(rrd_cmd_flush, args);
+}
+
 
 /* Calls Returning Data via the Info Interface */
 
 VALUE rb_rrd_infocall(
-    RRDFUNC func,
+    RRDINFOFUNC func,
     VALUE args)
 {
     string_arr a;
@@ -173,9 +186,12 @@ VALUE rb_rrd_infocall(
         case RD_I_STR:
             rb_hash_aset(result, key, rb_str_new2(data->value.u_str));
             break;
+        case RD_I_INT:
+            rb_hash_aset(result, key, INT2FIX(data->value.u_int));
+            break;
         case RD_I_BLO:
             rb_hash_aset(result, key,
-                         rb_str_new(data->value.u_blo.ptr,
+                         rb_str_new((char *)data->value.u_blo.ptr,
                                     data->value.u_blo.size));
             break;
         }
@@ -300,7 +316,7 @@ VALUE rb_rrd_last(
     string_arr_delete(a);
 
     RRD_CHECK_ERROR
-        return rb_funcall(rb_cTime, rb_intern("at"), 1, INT2FIX(last));
+        return rb_funcall(rb_cTime, rb_intern("at"), 1, UINT2NUM(last));
 }
 
 void Init_RRD(
@@ -318,6 +334,7 @@ void Init_RRD(
     rb_define_module_function(mRRD, "restore", rb_rrd_restore, -2);
     rb_define_module_function(mRRD, "tune", rb_rrd_tune, -2);
     rb_define_module_function(mRRD, "update", rb_rrd_update, -2);
+    rb_define_module_function(mRRD, "flush", rb_rrd_flush, -2);
     rb_define_module_function(mRRD, "info", rb_rrd_info, -2);
     rb_define_module_function(mRRD, "updatev", rb_rrd_updatev, -2);
     rb_define_module_function(mRRD, "graphv", rb_rrd_graphv, -2);