X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=bindings%2Fruby%2Fmain.c;h=d18b905c356d21c71de67de3895847f88ed73bde;hb=b375d439fffdc6985be67b9ca6cdf4d072c704b1;hp=e5a3e80052d4397a12db1d18ac284560b48573b3;hpb=ea8c705cc27ef33dee2cc6561ed51e16ddc5d0a9;p=rrdtool.git diff --git a/bindings/ruby/main.c b/bindings/ruby/main.c index e5a3e80..d18b905 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()); \ @@ -142,11 +148,11 @@ VALUE rb_rrd_update( /* Calls Returning Data via the Info Interface */ VALUE rb_rrd_infocall( - RRDFUNC func, + RRDINFOFUNC func, VALUE args) { string_arr a; - info_t *p, *data; + rrd_info_t *p, *data; VALUE result; a = string_arr_new(args); @@ -155,6 +161,7 @@ VALUE rb_rrd_infocall( RRD_CHECK_ERROR result = rb_hash_new(); + p = data; while (data) { VALUE key = rb_str_new2(data->key); @@ -171,17 +178,19 @@ VALUE rb_rrd_infocall( break; case RD_I_STR: rb_hash_aset(result, key, rb_str_new2(data->value.u_str)); - free(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,data->value.u_blo.size)); - free(data->value.u_blo.ptr); + rb_hash_aset(result, key, + rb_str_new((char *)data->value.u_blo.ptr, + data->value.u_blo.size)); break; } - p = data; data = data->next; - free(p); } + rrd_info_free(p); return result; } @@ -189,21 +198,21 @@ VALUE rb_rrd_info( VALUE self, VALUE args) { - return rrd_infocall(rrd_info, args); + return rb_rrd_infocall(rrd_info, args); } VALUE rb_rrd_updatev( VALUE self, VALUE args) { - return rrd_infocall(rrd_update_v, args); + return rb_rrd_infocall(rrd_update_v, args); } VALUE rb_rrd_graphv( VALUE self, VALUE args) { - return rrd_infocall(rrd_graph_v, args); + return rb_rrd_infocall(rrd_graph_v, args); } @@ -230,9 +239,9 @@ VALUE rb_rrd_fetch( for (i = 0; i < ds_cnt; i++) { rb_ary_push(names, rb_str_new2(raw_names[i])); - free(raw_names[i]); + rrd_freemem(raw_names[i]); } - free(raw_names); + rrd_freemem(raw_names); k = 0; data = rb_ary_new(); @@ -245,7 +254,7 @@ VALUE rb_rrd_fetch( } rb_ary_push(data, line); } - free(raw_data); + rrd_freemem(raw_data); result = rb_ary_new2(5); rb_ary_store(result, 0, INT2NUM(start)); @@ -277,9 +286,9 @@ VALUE rb_rrd_graph( p = calcpr; for (p = calcpr; p && *p; p++) { rb_ary_push(print_results, rb_str_new2(*p)); - free(*p); + rrd_freemem(*p); } - free(calcpr); + rrd_freemem(calcpr); rb_ary_store(result, 0, print_results); rb_ary_store(result, 1, INT2FIX(xsize)); rb_ary_store(result, 2, INT2FIX(ysize));