From ba8eeee29b8039d8f7d9eee5362117c2235296f0 Mon Sep 17 00:00:00 2001 From: Stewart Smith Date: Tue, 15 Dec 2015 21:35:44 +1100 Subject: use open/read/write for create_regular_file Signed-off-by: Stewart Smith --- fpart/src/command.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'fpart/src/command.c') diff --git a/fpart/src/command.c b/fpart/src/command.c index 6b4e56e..81cbc70 100644 --- a/fpart/src/command.c +++ b/fpart/src/command.c @@ -172,14 +172,15 @@ int create_regular_file(const char *path, size_t size, char pad) { assert(path != NULL); - RAII(FILE*, file, fopen(path, "w"), fclose); - if (file == NULL) { + int fd = open(path, O_CREAT|O_TRUNC|O_WRONLY, S_IRUSR|S_IWUSR); + if (fd == -1) { ERRNO(errno); return -1; } - if (ftruncate(fileno(file), size) < 0) { + if (ftruncate(fd, size) < 0) { ERRNO(errno); + close(fd); return -1; } @@ -188,15 +189,17 @@ int create_regular_file(const char *path, size_t size, char pad) memset(buf, pad, page_size); while (0 < size) { - ssize_t rc = fwrite(buf, 1, min(sizeof(buf), size), file); - if (rc <= 0 && ferror(file)) { + ssize_t rc = write(fd, buf, min(sizeof(buf), size)); + if (rc <= 0) { ERRNO(errno); + close(fd); return -1; } size -= rc; } + close(fd); return 0; } -- cgit v1.2.1