Commit 35b198ec authored by Ramon Nou's avatar Ramon Nou
Browse files

added readv, writev (missing preadv...

parent c2f6c8c3
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -43,9 +43,11 @@
#include <cstdint>
#include <vector>


extern "C" {
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/uio.h>
}

struct linux_dirent;
@@ -83,6 +85,14 @@ gkfs_pwrite(int fd, const void* buf, size_t count, off64_t offset);
ssize_t
gkfs_pread(int fd, void* buf, size_t count, off64_t offset);


ssize_t
gkfs_readv(int fd, const struct iovec* iov, int iovcnt);

ssize_t
gkfs_writev(int fd, const struct iovec* iov, int iovcnt);


int
gkfs_stat(const std::string& path, struct stat* buf, bool follow_links = true);

@@ -126,8 +136,6 @@ gkfs_readlink(const std::string& path, char* buf, int bufsize);
#endif




} // namespace syscall
namespace malleable {

+53 −0
Original line number Diff line number Diff line
@@ -216,6 +216,29 @@ DLSYM_WRAPPER(ssize_t, read, (int fd, void* buf, size_t nbyte),
              (fd, buf, nbyte), "read")
DLSYM_WRAPPER(ssize_t, write, (int fd, const void* buf, size_t nbyte),
              (fd, buf, nbyte), "write")
/*
   ssize_t readv(int fd, const struct iovec *iov, int iovcnt);

       ssize_t writev(int fd, const struct iovec *iov, int iovcnt);

       ssize_t preadv(int fd, const struct iovec *iov, int iovcnt,
                      off_t offset);

       ssize_t pwritev(int fd, const struct iovec *iov, int iovcnt,
                       off_t offset);

       ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt,
                       off_t offset, int flags);

       ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt,
                        off_t offset, int flags);
*/
DLSYM_WRAPPER(ssize_t, readv, (int fd, const struct iovec* iov, int iovcnt),
              (fd, iov, iovcnt), "readv")
DLSYM_WRAPPER(ssize_t, writev, (int fd, const struct iovec* iov, int iovcnt),
              (fd, iov, iovcnt), "writev")


DLSYM_WRAPPER(int, mkdir, (const char* path, mode_t mode), (path, mode),
              "mkdir")
DLSYM_WRAPPER(int, rmdir, (const char* path), (path), "rmdir")
@@ -2080,3 +2103,33 @@ readlinkat(int dfd, const char* path, char* buf, size_t bufsize) {
    GKFS_FALLBACK(readlinkat, dfd, path, buf, bufsize);
}
#endif


ssize_t
readv(int fd, const struct iovec* iov, int iovcnt) {
    initializeGekko();
    GKFS_OPERATION(readv, fd, iov, iovcnt)
    GKFS_FALLBACK(readv, fd, iov, iovcnt)
}


ssize_t
writev(int fd, const struct iovec* iov, int iovcnt) {
    initializeGekko();
    GKFS_OPERATION(writev, fd, iov, iovcnt)
    GKFS_FALLBACK(writev, fd, iov, iovcnt)
}

/*
ssize_t preadv(int fd, const struct iovec *iov, int iovcnt,
               off_t offset);

ssize_t pwritev(int fd, const struct iovec *iov, int iovcnt,
                off_t offset);

ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt,
                off_t offset, int flags);

ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt,
                 off_t offset, int flags);
*/
 No newline at end of file