From 1edac007f72e1a520764b767619ef075ccd79dbc Mon Sep 17 00:00:00 2001 From: oetiker Date: Mon, 11 Jun 2007 19:45:16 +0000 Subject: [PATCH] allow output to stdout -- Timo Stripf git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@1114 a5681a0c-68f1-0310-ab6d-d61299d08faa --- src/rrd_graph.c | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) 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); -- 2.30.2