diff options
-rw-r--r-- | ccan/string/string.c | 25 | ||||
-rw-r--r-- | ccan/string/string.h | 4 | ||||
-rw-r--r-- | tools/grab_file.c | 4 |
3 files changed, 31 insertions, 2 deletions
diff --git a/ccan/string/string.c b/ccan/string/string.c index b1de8eda..7686813c 100644 --- a/ccan/string/string.c +++ b/ccan/string/string.c @@ -6,6 +6,10 @@ #include <stdlib.h> #include "string.h" #include "talloc/talloc.h" +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <errno.h> char **strsplit(const void *ctx, const char *string, const char *delims, unsigned int *nump) @@ -42,3 +46,24 @@ char *strjoin(const void *ctx, char *strings[], const char *delim) } return ret; } + +void *grab_fd(const void *ctx, int fd) +{ + int ret; + unsigned int max = 16384, size = 0; + char *buffer; + + buffer = talloc_array(ctx, char, max+1); + while ((ret = read(fd, buffer + size, max - size)) > 0) { + size += ret; + if (size == max) + buffer = talloc_realloc(ctx, buffer, char, max*=2 + 1); + } + if (ret < 0) { + talloc_free(buffer); + buffer = NULL; + } else + buffer[size] = '\0'; + + return buffer; +} diff --git a/ccan/string/string.h b/ccan/string/string.h index b2cd814c..14a9c2c8 100644 --- a/ccan/string/string.h +++ b/ccan/string/string.h @@ -102,4 +102,8 @@ char **strsplit(const void *ctx, const char *string, const char *delims, * } */ char *strjoin(const void *ctx, char *strings[], const char *delim); + +void *grab_fd(const void *ctx, int fd); + +void *grab_file(const void *ctx, const char *filename); #endif /* CCAN_STRING_H */ diff --git a/tools/grab_file.c b/tools/grab_file.c index 8bd18f22..3c9eee6d 100644 --- a/tools/grab_file.c +++ b/tools/grab_file.c @@ -16,7 +16,7 @@ static int close_no_errno(int fd) return ret; } -void *grab_fd(const void *ctx, int fd) +/*void *grab_fd(const void *ctx, int fd) { int ret; unsigned int max = 16384, size = 0; @@ -35,7 +35,7 @@ void *grab_fd(const void *ctx, int fd) buffer[size] = '\0'; return buffer; -} +}*/ /* This version adds one byte (for nul term) */ void *grab_file(const void *ctx, const char *filename) |