From e5f52b7e2305019651fe4b6351d3466638af3488 Mon Sep 17 00:00:00 2001 From: Naoto Yamaguchi Date: Mon, 4 Jul 2022 07:21:07 +0900 Subject: Initial commit for libredundancyfileop source This patch add initial source code registration to repository. Bug-AGL: SPEC-4500 Signed-off-by: Naoto Yamaguchi Change-Id: I2b7331030f69e1d4cc396db9821f88e87e5b49a2 --- lib/file-util.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 lib/file-util.c (limited to 'lib/file-util.c') diff --git a/lib/file-util.c b/lib/file-util.c new file mode 100644 index 0000000..a45c946 --- /dev/null +++ b/lib/file-util.c @@ -0,0 +1,73 @@ +/** + * SPDX-License-Identifier: Apache-2.0 + * + * @file file-util.c + * @brief EINTR safe file functions + */ +#include "file-util.h" + +#include +#include +#include + +/** + * INTR safe read + * Interface spec is similar to read. + */ +ssize_t safe_read(int fd, void *buf, size_t count) +{ + ssize_t size = 0,ressize = 0; + size_t reqsize = 0; + uint8_t *pbuf = NULL; + + pbuf = (uint8_t*)buf; + reqsize = count; + + do { + size = read(fd, pbuf, (reqsize - ressize)); + if (size < 0) { + if (errno == EINTR) { + continue; + } else { + ressize = size; + break; + } + } + + pbuf += size; + ressize += size; + } while((ressize < reqsize) && (size != 0)); + + return ressize; +} + +/** + * INTR safe write + * Interface spec is similar to read. + */ +ssize_t safe_write(int fd, void *buf, size_t count) +{ + ssize_t size = 0,ressize = 0; + size_t reqsize = 0; + uint8_t *pbuf = NULL; + + pbuf = (uint8_t*)buf; + reqsize = count; + + do { + size = write(fd, pbuf, (reqsize - ressize)); + if (size < 0) { + if (errno == EINTR) { + continue; + } else { + ressize = size; + break; + } + } + + pbuf += size; + ressize += size; + } while((ressize < reqsize) && (size != 0)); + + return ressize; +} -- cgit