| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- /*
- * 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 <errno.h>
- #include <stdio.h>
- #include <stddef.h>
- #include <fcntl.h>
- #include <stdint.h>
- 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;
- }
|