X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_graph_helper.c;h=ec06d7789fd8115215551c2eb42ee4ba3d092ae0;hb=3bd65662b077ee2cbc185bc8f28708b2e1b76a32;hp=04bbaccb2a88ed6e0794729227335921711745e6;hpb=5a7eb5b62b485b61ddb80a40ef22f4337cf2289f;p=rrdtool.git diff --git a/src/rrd_graph_helper.c b/src/rrd_graph_helper.c index 04bbacc..ec06d77 100644 --- a/src/rrd_graph_helper.c +++ b/src/rrd_graph_helper.c @@ -1,5 +1,5 @@ /**************************************************************************** - * RRDtool 1.2.5 Copyright by Tobi Oetiker, 1997-2005 + * RRDtool 1.2.11 Copyright by Tobi Oetiker, 1997-2005 **************************************************************************** * rrd_graph_helper.c commandline parser functions * this code initially written by Alex van den Bogaerdt @@ -119,7 +119,7 @@ rrd_parse_color(char *string, graph_desc_t *gdp) { */ i=0; - while (string[i] && isxdigit(string[i])) i++; + while (string[i] && isxdigit((unsigned int)string[i])) i++; if (string[i] != '\0') return 1; /* garbage follows hexdigits */ switch (i) { case 3: @@ -295,6 +295,21 @@ rrd_parse_PVHLAST(char *line, unsigned int *eaten, graph_desc_t *gdp, image_desc int i,j,k; int colorfound=0; char tmpstr[MAX_VNAME_LEN + 10]; /* vname#RRGGBBAA\0 */ + static int spacecnt = 0; + + if (spacecnt == 0) { + float one_space = gfx_get_text_width(im->canvas, 0, + im->text_prop[TEXT_PROP_LEGEND].font, + im->text_prop[TEXT_PROP_LEGEND].size, + im->tabwidth," ", 0) / 4.0; + float target_space = gfx_get_text_width(im->canvas, 0, + im->text_prop[TEXT_PROP_LEGEND].font, + im->text_prop[TEXT_PROP_LEGEND].size, + im->tabwidth,"oo", 0); + spacecnt = target_space / one_space; + dprintf("- spacecnt: %i onespace: %f targspace: %f\n",spacecnt,one_space,target_space); + } + dprintf("- parsing '%s'\n",&line[*eaten]); @@ -315,16 +330,28 @@ rrd_parse_PVHLAST(char *line, unsigned int *eaten, graph_desc_t *gdp, image_desc tmpstr[j]='\0'; } + /* Number or vname ? + * It is a number only if "k" equals either "j" or "i", + * depending on which is appropriate + */ dprintf("- examining value '%s'\n",tmpstr); k=0; if (gdp->gf == GF_VRULE) { sscanf(tmpstr,"%li%n",&gdp->xrule,&k); - if (k) dprintf("- found time: %li\n",gdp->xrule); + if (((j!=0)&&(k==j))||((j==0)&&(k==i))) { + dprintf("- found time: %li\n",gdp->xrule); + } else { + gdp->xrule=0; /* reset the value to "none" */ + } } else { sscanf(tmpstr,"%lf%n",&gdp->yrule,&k); - if (k) dprintf("- found number: %f\n",gdp->yrule); + if (((j!=0)&&(k==j))||((j==0)&&(k==i))) { + dprintf("- found number: %f\n",gdp->yrule); + } else { + gdp->yrule=DNAN; /* reset the value to "none" */ + } } - if (!k) { + if (((j!=0)&&(k!=j))||((j==0)&&(k!=i))) { if ((gdp->vidx=find_var(im,tmpstr))<0) { rrd_set_error("Not a valid vname: %s in line %s",tmpstr,line); return 1; @@ -399,16 +426,15 @@ rrd_parse_PVHLAST(char *line, unsigned int *eaten, graph_desc_t *gdp, image_desc dprintf("- examining '%s'\n",&line[*eaten]); if (linecp[*eaten] != '\0' && linecp[*eaten] != ':') { - /* If the legend is not empty, it has to be prefixed with "m ". This then gets + int spi; + /* If the legend is not empty, it has to be prefixed with spacecnt ' ' characters. This then gets * replaced by the color box later on. */ - (*eaten)--; - linecp[*eaten]='o'; - (*eaten)--; - linecp[*eaten]='o'; + for (spi=0;spi 1;spi++){ + linecp[--(*eaten)]=' '; + } } if (rrd_parse_legend(linecp, eaten, gdp)) err=1; - free(linecp); if (err) return 1;