From b93e5b6d5b2a8d598eaca29c20b697498e75a906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20O=2E=20Sel=C3=A5sdal?= Date: Thu, 13 Mar 2014 23:16:50 +0100 Subject: [PATCH] add uc_read_fd function --- include/ucore/read_file.h | 8 ++++++++ src/read_file.c | 18 +++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/include/ucore/read_file.h b/include/ucore/read_file.h index 9e1ea10..26e4987 100644 --- a/include/ucore/read_file.h +++ b/include/ucore/read_file.h @@ -21,6 +21,14 @@ extern "C" { char * uc_read_file(const char *file_name, size_t *length, size_t max); +/** Read the content of a file descriptor as a stream. + * @see uc_read_file + * This is similar but reads from a file descriptor, + * of any type as long as it supports the read() call. + */ +char * +uc_read_fd(int fd, size_t *length, size_t max); + #ifdef __cplusplus } #endif diff --git a/src/read_file.c b/src/read_file.c index 62f0d81..2bdb9e5 100644 --- a/src/read_file.c +++ b/src/read_file.c @@ -10,9 +10,8 @@ #define CHUNK_SZ 1024 char * -uc_read_file(const char *f, size_t *length, size_t max) +uc_read_fd(int fd, size_t *length, size_t max) { - int fd; char *s = NULL; char *p; struct stat statb; @@ -20,9 +19,6 @@ uc_read_file(const char *f, size_t *length, size_t max) *length = 0; - if ((fd = open(f, O_RDONLY)) == -1) - return NULL; - if (fstat(fd, &statb) == -1) { goto out_close; } @@ -85,3 +81,15 @@ out_close: return s; } +char * +uc_read_file(const char *f, size_t *length, size_t max) +{ + int fd; + + if ((fd = open(f, O_RDONLY)) == -1) { + *length = 0; + return NULL; + } + + return uc_read_fd(fd, length, max); +}