X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=bindings%2Fruby%2Fmain.c;h=408994f18bf6b3215093c02232e309950e976059;hb=6b4c40f288ebb00cee2ba2cb2f51a5c7ab2dc743;hp=0648840e9bdd0b9850118d2c988c22f0d12f91b7;hpb=054119792116e89c052447d2597887e2b03450c5;p=rrdtool.git diff --git a/bindings/ruby/main.c b/bindings/ruby/main.c index 0648840..408994f 100644 --- a/bindings/ruby/main.c +++ b/bindings/ruby/main.c @@ -4,6 +4,7 @@ #include #include +#include #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()); \ @@ -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; @@ -155,6 +168,7 @@ VALUE rb_rrd_infocall( RRD_CHECK_ERROR result = rb_hash_new(); + p = data; while (data) { VALUE key = rb_str_new2(data->key); @@ -171,19 +185,19 @@ VALUE rb_rrd_infocall( break; case RD_I_STR: rb_hash_aset(result, key, rb_str_new2(data->value.u_str)); - rrd_freemem(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)); - rrd_freemem(data->value.u_blo.ptr); break; } - p = data; data = data->next; - rrd_freemem(p); } + rrd_info_free(p); return result; } @@ -302,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( @@ -320,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);