X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_graph.c;h=a24889fb439458685b338b1cf50e4299d6f80316;hp=9acf82e590c72ca4812391cd6d53491369a07022;hb=a9c2a94950e57c9d8847073c579a24455e749a66;hpb=ac630adec930653637199258efd99024d49325c7 diff --git a/src/rrd_graph.c b/src/rrd_graph.c index 9acf82e..a24889f 100644 --- a/src/rrd_graph.c +++ b/src/rrd_graph.c @@ -6,6 +6,7 @@ #include +#include #ifdef WIN32 #include "strftime.h" @@ -307,11 +308,8 @@ int im_free( if (im == NULL) return 0; - if (im->use_rrdcached) - { - rrdc_disconnect (); - im->use_rrdcached = 0; - } + if (im->daemon_addr != NULL) + free(im->daemon_addr); for (i = 0; i < (unsigned) im->gdes_c; i++) { if (im->gdes[i].data_first) { @@ -845,7 +843,7 @@ int data_fetch( * - a connection to the daemon has been established * - this is the first occurrence of that RRD file */ - if (im->use_rrdcached) + if (rrdc_is_connected(im->daemon_addr)) { int status; @@ -869,7 +867,7 @@ int data_fetch( return (-1); } } - } /* if (im->use_rrdcached) */ + } /* if (rrdc_is_connected()) */ if ((rrd_fetch_fn(im->gdes[i].rrd, im->gdes[i].cf, @@ -941,7 +939,7 @@ long find_var( return -1; } -/* find the largest common denominator for all the numbers +/* find the greatest common divisor for all the numbers in the 0 terminated num array */ long lcd( long *num) @@ -1659,11 +1657,11 @@ int leg_place( int border = im->text_prop[TEXT_PROP_LEGEND].size * 2.0; int fill = 0, fill_last; int leg_c = 0; - int leg_x = border; + double leg_x = border; int leg_y = im->yimg; int leg_y_prev = im->yimg; int leg_cc; - int glue = 0; + double glue = 0; int i, ii, mark = 0; char prt_fctn; /*special printfunctions */ char default_txtalign = TXA_JUSTIFIED; /*default line orientation */ @@ -1795,12 +1793,12 @@ int leg_place( if (prt_fctn != '\0') { leg_x = border; if (leg_c >= 2 && prt_fctn == 'j') { - glue = (im->ximg - fill - 2 * border) / (leg_c - 1); + glue = (double)(im->ximg - fill - 2 * border) / (double)(leg_c - 1); } else { glue = 0; } if (prt_fctn == 'c') - leg_x = (im->ximg - fill) / 2.0; + leg_x = (double)(im->ximg - fill) / 2.0; if (prt_fctn == 'r') leg_x = im->ximg - fill - border; for (ii = mark; ii <= i; ii++) { @@ -1809,13 +1807,13 @@ int leg_place( im->gdes[ii].leg_x = leg_x; im->gdes[ii].leg_y = leg_y; leg_x += - gfx_get_text_width(im, leg_x, + (double)gfx_get_text_width(im, leg_x, im-> text_prop [TEXT_PROP_LEGEND]. font_desc, im->tabwidth, im->gdes[ii].legend) - + legspace[ii] + +(double)legspace[ii] + glue; } leg_y_prev = leg_y; @@ -3685,14 +3683,11 @@ rrd_info_t *rrd_graph_v( if (im.imginfo) { rrd_infoval_t info; + char *path; char *filename; - filename = im.graphfile + strlen(im.graphfile); - while (filename > im.graphfile) { - if (*(filename - 1) == '/' || *(filename - 1) == '\\') - break; - filename--; - } + path = strdup(im.graphfile); + filename = basename(path); info.u_str = sprintf_alloc(im.imginfo, filename, @@ -3700,6 +3695,7 @@ rrd_info_t *rrd_graph_v( im.ximg), (long) (im.zoom * im.yimg)); grinfo_push(&im, sprintf_alloc("image_info"), RD_I_STR, info); free(info.u_str); + free(path); } if (im.rendered_image) { rrd_infoval_t img; @@ -3748,6 +3744,7 @@ void rrd_graph_init( #endif #endif im->base = 1000; + im->daemon_addr = NULL; im->draw_x_grid = 1; im->draw_y_grid = 1; im->extra_flags = 0; @@ -3763,7 +3760,6 @@ void rrd_graph_init( im->grinfo_current = (rrd_info_t *) NULL; im->imgformat = IF_PNG; im->imginfo = NULL; - im->use_rrdcached = 0; im->lazy = 0; im->logarithmic = 0; im->maxval = DNAN; @@ -4175,7 +4171,7 @@ void rrd_graph_options( if (size > 0) { rrd_set_font_desc(im,propidx,NULL,size); } - if ((int) strlen(optarg) > end) { + if ((int) strlen(optarg) > end+2) { if (optarg[end] == ':') { rrd_set_font_desc(im,propidx,optarg + end + 1,0); } else { @@ -4254,21 +4250,20 @@ void rrd_graph_options( break; case 'd': { - int status; - if (im->use_rrdcached) + if (im->daemon_addr != NULL) { rrd_set_error ("You cannot specify --daemon " "more than once."); return; } - status = rrdc_connect (optarg); - if (status != 0) + + im->daemon_addr = strdup(optarg); + if (im->daemon_addr == NULL) { - rrd_set_error ("rrdc_connect(%s) failed with status %i.", - optarg, status); - return; + rrd_set_error("strdup failed"); + return; } - im->use_rrdcached = 1; + break; } case '?': @@ -4280,24 +4275,9 @@ void rrd_graph_options( } } /* while (1) */ - if (im->use_rrdcached == 0) - { - char *temp; - - temp = getenv (ENV_RRDCACHED_ADDRESS); - if (temp != NULL) - { - int status; - - status = rrdc_connect (temp); - if (status != 0) - { - rrd_set_error ("rrdc_connect(%s) failed with status %i.", - temp, status); - return; - } - im->use_rrdcached = 1; - } + { /* try to connect to rrdcached */ + int status = rrdc_connect(im->daemon_addr); + if (status != 0) return; } pango_cairo_context_set_font_options(pango_layout_get_context(im->layout), im->font_options); @@ -4542,21 +4522,16 @@ int vdef_calc( graph_desc_t *src, *dst; rrd_value_t *data; long step, steps; - unsigned long end; dst = &im->gdes[gdi]; src = &im->gdes[dst->vidx]; data = src->data + src->ds; - end = - src->end_orig % (long) src->step == - 0 ? src->end_orig : (src->end_orig + (long) src->step - - src->end_orig % (long) src->step); - steps = (end - src->start) / src->step; + steps = (src->end - src->start) / src->step; #if 0 printf ("DEBUG: start == %lu, end == %lu, %lu steps\n", - src->start, src->end_orig, steps); + src->start, src->end, steps); #endif switch (dst->vf.op) { case VDEF_PERCENT:{