ssize_t safe_pread_exact(int fd, void *b, size_t c, off_t off) { int ret = safe_pread(fd, b, c, off); if (ret < 0) return ret; if (ret != (int)c) return -EDOM; return 0; }
ssize_t safe_pread_exact(int fd, void *buf, size_t count, off_t offset) { ssize_t ret = safe_pread(fd, buf, count, offset); if (ret < 0) return ret; if ((size_t)ret != count) return -EDOM; return 0; }
ssize_t simple_io_read_whole_file_zt(const char *fname, char *buf, int sz) { ssize_t res; int fd = open(fname, O_RDONLY); if (fd < 0) { int err = errno; return -err; } memset(buf, 0, sz); if (sz == 0) return 0; res = safe_pread(fd, buf, sz - 1, 0); if (res < 0) { close(fd); return res; } close(fd); return res; }