diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2005-08-30 17:21:41 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:35:03 -0500 |
commit | 10ee597a786839dfa327c166c1919c0b11977632 (patch) | |
tree | 299a9bbf3beb1b2bedbdb8ef5ae2af9401394ac8 | |
parent | 81952ea4e8f17e848b3dba487a38787cf5ae304c (diff) | |
download | samba-10ee597a786839dfa327c166c1919c0b11977632.tar.gz samba-10ee597a786839dfa327c166c1919c0b11977632.tar.bz2 samba-10ee597a786839dfa327c166c1919c0b11977632.zip |
r9807: Use talloc in fd_lines_load() and file_lines_load(). The return
value now can be freed using talloc(). I couldn't find the free_lines_list()
function that was supposed to free it before.
(This used to be commit f6f31661d05e392a9f2819c5a0ceff92c1b7656a)
-rw-r--r-- | source4/lib/util_file.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/source4/lib/util_file.c b/source4/lib/util_file.c index fdf06c47c5..1330b0a70d 100644 --- a/source4/lib/util_file.c +++ b/source4/lib/util_file.c @@ -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; } |