X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Frrd_graph.c;h=f71f6dc7237a15b7f3a267bb48fe073a00fcf9d6;hb=1edac007f72e1a520764b767619ef075ccd79dbc;hp=e83812132329c2201eabec6cb82f21dc1a576504;hpb=6d3b97fdec8c3c394f6876582cea248e80b67542;p=rrdtool.git diff --git a/src/rrd_graph.c b/src/rrd_graph.c index e838121..f71f6dc 100644 --- a/src/rrd_graph.c +++ b/src/rrd_graph.c @@ -1971,6 +1971,10 @@ double frexp10( return mnt; } +/* from http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm */ +/* yes we are loosing precision by doing tos with floats instead of doubles + but it seems more stable this way. */ + static int AlmostEqual2sComplement( float A, float B, @@ -2844,9 +2848,17 @@ int graph_size_location( return 0; } -/* from http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm */ -/* yes we are loosing precision by doing tos with floats instead of doubles - but it seems more stable this way. */ + + +static cairo_status_t cairo_write_func_file( + void *closure, + const unsigned char *data, + unsigned int length) +{ + if (fwrite(data, length, 1, closure) != 1) + return CAIRO_STATUS_WRITE_ERROR; + return CAIRO_STATUS_SUCCESS; +} /* draw that picture thing ... */ @@ -3276,11 +3288,20 @@ int graph_paint( switch (im->imgformat) { case IF_PNG: - if (cairo_surface_write_to_png(im->surface, im->graphfile) != - CAIRO_STATUS_SUCCESS) { - rrd_set_error("Could not save png to '%s'", im->graphfile); - return 1; - } + { + cairo_status_t status; + + if (strcmp(im->graphfile, "-") == 0) { + status = cairo_surface_write_to_png_stream(im->surface, &cairo_write_func_file, (void*)stdout); + } else { + status = cairo_surface_write_to_png(im->surface, im->graphfile); + } + + if (status != CAIRO_STATUS_SUCCESS) { + rrd_set_error("Could not save png to '%s'", im->graphfile); + return 1; + } + } break; default: cairo_show_page(im->cr);