X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_graph_helper.c;h=1781fa3b088279b60f3009cf0dcd78b51635f86f;hb=734468bcc23497c7eba0deba87c92aa219fd46d1;hp=bca17d0526766459fdf70c9fa11df4f79cc99ff6;hpb=d65a52e9ba9c5cb9342b6266703f7dae53ddacad;p=rrdtool.git diff --git a/src/rrd_graph_helper.c b/src/rrd_graph_helper.c index bca17d0..1781fa3 100644 --- a/src/rrd_graph_helper.c +++ b/src/rrd_graph_helper.c @@ -1,5 +1,5 @@ /**************************************************************************** - * RRDtool 1.2.11 Copyright by Tobi Oetiker, 1997-2005 + * RRDtool 1.2.17 Copyright by Tobi Oetiker, 1997-2006 **************************************************************************** * rrd_graph_helper.c commandline parser functions * this code initially written by Alex van den Bogaerdt @@ -133,6 +133,10 @@ rrd_parse_find_gf(const char *const line, unsigned int *const eaten, graph_desc_ rrd_set_error("Malformed '%s' command in line '%s'\n",&line[*eaten],line); return 1; } + if (line[*eaten] == '\0') { + rrd_set_error("Expected some arguments after '%s'\n",line); + return 1; + } return 0; } @@ -256,7 +260,7 @@ int rrd_parse_print(const char *const line, unsigned int *const eaten, graph_desc_t *const gdp, image_desc_t *const im) { /* vname:CF:format in case of DEF-based vname ** vname:CF:format in case of CDEF-based vname - ** vname:format in case of VDEF-based vname + ** vname:format[:strftime] in case of VDEF-based vname */ if ((gdp->vidx=rrd_parse_find_vname(line,eaten,gdp,im))<0) return 1; @@ -279,6 +283,11 @@ rrd_parse_print(const char *const line, unsigned int *const eaten, graph_desc_t get the format at this juncture */ strcpy(gdp->format,gdp->legend); gdp->legend[0]='\0'; + /* this is a very crud test, parsing :style flags should be in a function */ + if (im->gdes[gdp->vidx].gf == GF_VDEF && strcmp(line+(*eaten),":strftime")==0){ + gdp->strftm = 1; + (*eaten)+=strlen(":strftime"); + } return 0; } @@ -776,6 +785,9 @@ rrd_parse_cdef(const char *const line, unsigned int *const eaten, graph_desc_t * void rrd_graph_script(int argc, char *argv[], image_desc_t *const im, int optno) { int i; + /* save state for STACK backward compat function */ + enum gf_en last_gf=GF_PRINT; + float last_linewidth=0.0; for (i=optind+optno;igf) { case GF_SHIFT: /* vname:value */ if (rrd_parse_shift(argv[i],&eaten,gdp,im)) return; @@ -797,13 +809,13 @@ rrd_graph_script(int argc, char *argv[], image_desc_t *const im, int optno) { if (rrd_parse_xport(argv[i],&eaten,gdp,im)) return; break; case GF_PRINT: /* vname:CF:format -or- vname:format */ + im->prt_c++; case GF_GPRINT: /* vname:CF:format -or- vname:format */ if (rrd_parse_print(argv[i],&eaten,gdp,im)) return; break; case GF_COMMENT: /* text */ if (rrd_parse_legend(argv[i],&eaten,gdp)) return; break; - case GF_STACK: /* vname-or-value[#color[:legend]] */ #ifdef WITH_PIECHART case GF_PART: /* value[#color[:legend]] */ #endif @@ -812,7 +824,20 @@ rrd_graph_script(int argc, char *argv[], image_desc_t *const im, int optno) { case GF_LINE: /* vname-or-value[#color[:legend]][:STACK] */ case GF_AREA: /* vname-or-value[#color[:legend]][:STACK] */ case GF_TICK: /* vname#color[:num[:legend]] */ - if (rrd_parse_PVHLAST(argv[i],&eaten,gdp,im)) return; + if (rrd_parse_PVHLAST(argv[i],&eaten,gdp,im))return; + last_gf = gdp->gf; + last_linewidth = gdp->linewidth; + break; + case GF_STACK: /* vname-or-value[#color[:legend]] */ + if (rrd_parse_PVHLAST(argv[i],&eaten,gdp,im))return; + if (last_gf == GF_LINE || last_gf == GF_AREA){ + gdp->gf = last_gf; + gdp->linewidth = last_linewidth; + } else { + rrd_set_error("STACK must follow LINE or AREA! command:\n%s", + &argv[i][eaten],argv[i]); + return; + } break; /* data acquisition */ case GF_DEF: /* vname=x:DS:CF:[:step=#][:start=#][:end=#] */