+/* a simplified version of the above that just creates the graph in memory
+ and returns a pointer to it. */
+
+unsigned char *rrd_graph_in_memory(
+ int argc,
+ char **argv,
+ char ***prdata,
+ int *xsize,
+ int *ysize,
+ double *ymin,
+ double *ymax,
+ size_t * img_size)
+{
+ image_desc_t im;
+
+ rrd_graph_init(&im);
+
+ /* a dummy surface so that we can measure text sizes for placements */
+ im.surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 10, 10);
+ im.cr = cairo_create(im.surface);
+
+ rrd_graph_options(argc, argv, &im);
+ if (rrd_test_error()) {
+ im_free(&im);
+ return NULL;
+ }
+
+ rrd_graph_script(argc, argv, &im, 1);
+ if (rrd_test_error()) {
+ im_free(&im);
+ return NULL;
+ }
+
+ /* Everything is now read and the actual work can start */
+
+ /* by not assigning a name to im.graphfile data will be written to
+ newly allocated memory on im.rendered_image ... */
+
+ (*prdata) = NULL;
+ if (graph_paint(&im, prdata) == -1) {
+ im_free(&im);
+ return NULL;
+ }
+
+ *xsize = im.ximg;
+ *ysize = im.yimg;
+ *ymin = im.minval;
+ *ymax = im.maxval;
+ *img_size = im.rendered_image_size;
+ im_free(&im);
+
+ return im.rendered_image;
+}
+