main: Close memory leak of shader string from load_text_file.
authorCarl Worth <cworth@cworth.org>
Sat, 19 Jun 2010 00:37:02 +0000 (17:37 -0700)
committerCarl Worth <cworth@cworth.org>
Thu, 24 Jun 2010 02:00:42 +0000 (19:00 -0700)
Could have just added a call to free() to main, but since we're using
talloc everywhere else, we might as well just use it here too. So pass
a new 'ctx' argument to load_text_file.

This removes a single memory leak from all invocations of the
standalone glsl compiler.

main.cpp

index dcd4b8f672557cf70b217905482fb97500a45ac8..dfed4a30e830671e5f043df459e30e9bf7db3610 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -36,9 +36,9 @@
 #include "ir_print_visitor.h"
 #include "program.h"
 
-
+/* Returned string will have 'ctx' as its talloc owner. */
 static char *
-load_text_file(const char *file_name, size_t *size)
+load_text_file(void *ctx, const char *file_name, size_t *size)
 {
        char *text = NULL;
        struct stat st;
@@ -51,7 +51,7 @@ load_text_file(const char *file_name, size_t *size)
        }
 
        if (fstat(fd, & st) == 0) {
-          text = (char *) malloc(st.st_size + 1);
+          text = (char *) talloc_size(ctx, st.st_size + 1);
                if (text != NULL) {
                        do {
                                ssize_t bytes = read(fd, text + total_read,
@@ -229,7 +229,8 @@ main(int argc, char **argv)
       else
         usage_fail(argv[0]);
 
-      shader->Source = load_text_file(argv[optind], &shader->SourceLen);
+      shader->Source = load_text_file(whole_program,
+                                     argv[optind], &shader->SourceLen);
       if (shader->Source == NULL) {
         printf("File \"%s\" does not exist.\n", argv[optind]);
         exit(EXIT_FAILURE);