/* * Copyright 2024 Sony Semiconductor Solutions Corporation. * * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */ #include "platform_api_vmcore.h" #include "platform_api_extension.h" #include #include #include #include #include struct iovec { void *iov_base; size_t iov_len; }; ssize_t readv(int fd, const struct iovec *iov, int iovcnt) { ssize_t ntotal; ssize_t nread; size_t remaining; uint8_t *buffer; int i; /* Process each entry in the struct iovec array */ for (i = 0, ntotal = 0; i < iovcnt; i++) { /* Ignore zero-length reads */ if (iov[i].iov_len > 0) { buffer = iov[i].iov_base; remaining = iov[i].iov_len; /* Read repeatedly as necessary to fill buffer */ do { /* NOTE: read() is a cancellation point */ nread = read(fd, buffer, remaining); /* Check for a read error */ if (nread < 0) { return nread; } /* Check for an end-of-file condition */ else if (nread == 0) { return ntotal; } /* Update pointers and counts in order to handle partial * buffer reads. */ buffer += nread; remaining -= nread; ntotal += nread; } while (remaining > 0); } } return ntotal; } ssize_t writev(int fd, const struct iovec *iov, int iovcnt) { uint16_t i, num; int length; num = 0; for (i = 0; i < iovcnt; i++) { if (iov[i].iov_len > 0) { length = write(fd, iov[i].iov_base, iov[i].iov_len); if (length != iov[i].iov_len) return errno; num += iov[i].iov_len; } } return num; } int fstatat(int fd, const char *path, struct stat *buf, int flag) { errno = ENOSYS; return -1; } int mkdirat(int fd, const char *path, mode_t mode) { errno = ENOSYS; return -1; } ssize_t readlinkat(int fd, const char *path, char *buf, size_t bufsize) { errno = EINVAL; return -1; } int linkat(int fd1, const char *path1, int fd2, const char *path2, int flag) { errno = ENOSYS; return -1; } int renameat(int fromfd, const char *from, int tofd, const char *to) { errno = ENOSYS; return -1; } int symlinkat(const char *target, int fd, const char *path) { errno = ENOSYS; return -1; } int unlinkat(int fd, const char *path, int flag) { errno = ENOSYS; return -1; } int utimensat(int fd, const char *path, const struct timespec *ts, int flag) { errno = ENOSYS; return -1; } DIR * fdopendir(int fd) { errno = ENOSYS; return NULL; } int fdatasync(int fd) { errno = ENOSYS; return -1; } ssize_t preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset) { errno = ENOSYS; return 0; } ssize_t pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset) { errno = ENOSYS; return 0; } char * realpath(char *path, char *resolved_path) { errno = ENOSYS; return NULL; } int futimens(int fd, const struct timespec *times) { errno = ENOSYS; return -1; } int posix_fallocate(int __fd, off_t __offset, off_t __length) { errno = ENOSYS; return -1; } os_raw_file_handle os_invalid_raw_handle(void) { return -1; }