r9807: Use talloc in fd_lines_load() and file_lines_load(). The return
authorJelmer Vernooij <jelmer@samba.org>
Tue, 30 Aug 2005 17:21:41 +0000 (17:21 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:35:03 +0000 (13:35 -0500)
value now can be freed using talloc(). I couldn't find the free_lines_list()
function that was supposed to free it before.

source/lib/util_file.c

index fdf06c47c5d27531f5ea5d1b1302d1d89697f882..1330b0a70d09e97f5ae1a9642636bd8e226167b4 100644 (file)
@@ -271,7 +271,7 @@ void *map_file(char *fname, size_t size)
 /****************************************************************************
 parse a buffer into lines
 ****************************************************************************/
-static char **file_lines_parse(char *p, size_t size, int *numlines)
+static char **file_lines_parse(char *p, size_t size, int *numlines, TALLOC_CTX *mem_ctx)
 {
        int i;
        char *s, **ret;
@@ -282,11 +282,14 @@ static char **file_lines_parse(char *p, size_t size, int *numlines)
                if (s[0] == '\n') i++;
        }
 
-       ret = malloc_array_p(char *, i+2);
+       ret = talloc_array(mem_ctx, char *, i+2);
        if (!ret) {
-               SAFE_FREE(p);
+               talloc_free(p);
                return NULL;
        }       
+       
+       talloc_reference(ret, p);
+       
        memset(ret, 0, sizeof(ret[0])*(i+2));
        if (numlines) *numlines = i;
 
@@ -306,33 +309,43 @@ static char **file_lines_parse(char *p, size_t size, int *numlines)
 
 /****************************************************************************
 load a file into memory and return an array of pointers to lines in the file
-must be freed with file_lines_free(). 
+must be freed with talloc_free(). 
 ****************************************************************************/
 char **file_lines_load(const char *fname, int *numlines, TALLOC_CTX *mem_ctx)
 {
        char *p;
+       char **lines;
        size_t size;
 
        p = file_load(fname, &size, mem_ctx);
        if (!p) return NULL;
 
-       return file_lines_parse(p, size, numlines);
+       lines = file_lines_parse(p, size, numlines, mem_ctx);
+
+       talloc_free(p);
+
+       return lines;
 }
 
 /****************************************************************************
 load a fd into memory and return an array of pointers to lines in the file
-must be freed with file_lines_free(). If convert is true calls unix_to_dos on
+must be freed with talloc_free(). If convert is true calls unix_to_dos on
 the list.
 ****************************************************************************/
 char **fd_lines_load(int fd, int *numlines, TALLOC_CTX *mem_ctx)
 {
        char *p;
+       char **lines;
        size_t size;
 
        p = fd_load(fd, &size, mem_ctx);
        if (!p) return NULL;
 
-       return file_lines_parse(p, size, numlines);
+       lines = file_lines_parse(p, size, numlines, mem_ctx);
+
+       talloc_free(p);
+
+       return lines;
 }