X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_info.c;h=f53a752ee29e7755daae0caeb43b750f66f28462;hp=3c0ee0e832e9a0410986b58e1190776169eb2f13;hb=7bd35b8d099910071a57c66687f6ef79c5df9a5c;hpb=f4fd83170248b7945de8105a0ecbe13e11dbbcfe diff --git a/src/rrd_info.c b/src/rrd_info.c index 3c0ee0e..f53a752 100644 --- a/src/rrd_info.c +++ b/src/rrd_info.c @@ -1,5 +1,5 @@ /***************************************************************************** - * RRDtool 1.2.99907080300 Copyright by Tobi Oetiker, 1997-2007 + * RRDtool 1.3rc7 Copyright by Tobi Oetiker, 1997-2008 ***************************************************************************** * rrd_info Get Information about the configuration of an RRD *****************************************************************************/ @@ -20,18 +20,14 @@ char *sprintf_alloc( char *fmt, ...) { -#ifdef HAVE_VSNPRINTF - int maxlen = 50; -#else - int maxlen = 1000; -#endif + int maxlen = 1024 + strlen(fmt); char *str = NULL; va_list argp; - str = malloc(sizeof(char) * (strlen(fmt) + maxlen)); + str = malloc(sizeof(char) * (maxlen + 1)); if (str != NULL) { va_start(argp, fmt); #ifdef HAVE_VSNPRINTF - vsnprintf(str, maxlen - 1, fmt, argp); + vsnprintf(str, maxlen, fmt, argp); #else vsprintf(str, fmt, argp); #endif @@ -71,6 +67,12 @@ info_t next->value.u_str = malloc(sizeof(char) * (strlen(value.u_str) + 1)); strcpy(next->value.u_str, value.u_str); break; + case RD_I_BLO: + next->value.u_blo.size = value.u_blo.size; + next->value.u_blo.ptr = + malloc(sizeof(unsigned char) * value.u_blo.size); + memcpy(next->value.u_blo.ptr, value.u_blo.ptr, value.u_blo.size); + break; } return (next); } @@ -186,8 +188,9 @@ info_t *rrd_info_r( info.u_cnt = rrd.rra_def[i].row_cnt; cd = info_push(cd, sprintf_alloc("rra[%d].rows", i), RD_I_CNT, info); - info.u_cnt=rrd.rra_ptr[i].cur_row; - cd=info_push(cd,sprintf_alloc("rra[%d].cur_row",i), RD_I_CNT, info); + info.u_cnt = rrd.rra_ptr[i].cur_row; + cd = info_push(cd, sprintf_alloc("rra[%d].cur_row", i), RD_I_CNT, + info); info.u_cnt = rrd.rra_def[i].pdp_cnt; cd = info_push(cd, sprintf_alloc("rra[%d].pdp_per_row", i), RD_I_CNT, @@ -322,3 +325,56 @@ info_t *rrd_info_r( rrd_free(&rrd); return (data); } + + +void info_print( + info_t *data) +{ + while (data) { + printf("%s = ", data->key); + + switch (data->type) { + case RD_I_VAL: + if (isnan(data->value.u_val)) + printf("NaN\n"); + else + printf("%0.10e\n", data->value.u_val); + break; + case RD_I_CNT: + printf("%lu\n", data->value.u_cnt); + break; + case RD_I_INT: + printf("%d\n", data->value.u_int); + break; + case RD_I_STR: + printf("\"%s\"\n", data->value.u_str); + break; + case RD_I_BLO: + printf("BLOB_SIZE:%lu\n", data->value.u_blo.size); + fwrite(data->value.u_blo.ptr, data->value.u_blo.size, 1, stdout); + break; + } + data = data->next; + } +} + +void info_free( + info_t *data) +{ + info_t *save; + + while (data) { + save = data; + if (data->key) { + if (data->type == RD_I_STR) { + free(data->value.u_str); + } + if (data->type == RD_I_BLO) { + free(data->value.u_blo.ptr); + } + free(data->key); + } + data = data->next; + free(save); + } +}