gvRenderData outputs non-null terminated string and string length, reduced reallocations
authorglenlow <devnull@localhost>
Sat, 2 Feb 2008 09:11:28 +0000 (09:11 +0000)
committerglenlow <devnull@localhost>
Sat, 2 Feb 2008 09:11:28 +0000 (09:11 +0000)
lib/gvc/gvc.c

index b46d3f8bd37f6b97c1056de88955889b412de33e..2087f558602f5f281e6a8af52e27f5435d7d97a9 100644 (file)
@@ -150,7 +150,7 @@ int gvRenderFilename(GVC_t *gvc, graph_t *g, char *format, char *filename)
 }
 
 /* Render layout in a specified format to a malloc'ed string */
-int gvRenderData(GVC_t *gvc, graph_t *g, char *format, char **result)
+int gvRenderData(GVC_t *gvc, graph_t *g, char *format, char **result, unsigned int *length)
 {
     int rc;
     GVJ_t *job;
@@ -172,14 +172,14 @@ int gvRenderData(GVC_t *gvc, graph_t *g, char *format, char **result)
        return -1;
     }
 
-#define OUTPUT_DATA_INITIAL_ALLOCATION 1000
+/* page size on Linux, Mac OS X and Windows */
+#define OUTPUT_DATA_INITIAL_ALLOCATION 4096
 
     if(!result || !(*result = malloc(OUTPUT_DATA_INITIAL_ALLOCATION))) {
        agerr(AGERR, "failure malloc'ing for result string");
        return -1;
     }
 
-    **result = '\0';
     job->output_data = *result;
     job->output_data_allocated = OUTPUT_DATA_INITIAL_ALLOCATION;
     job->output_data_position = 0;
@@ -189,6 +189,7 @@ int gvRenderData(GVC_t *gvc, graph_t *g, char *format, char **result)
     gvdevice_finalize(job);
 
     *result = job->output_data;
+       *length = job->output_data_position;
     gvjobs_delete(gvc);
 
     return 0;