| // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by the GPL v2 license that can |
| // be found in the LICENSE file. |
| // |
| // Wrapper for File's access to the OS. |
| // TODO(wad) coalesce all the OS wrappers into one common OSEnv class. |
| #ifndef VERITY_SIMPLE_FILE_ENV_H__ |
| #define VERITY_SIMPLE_FILE_ENV_H__ 1 |
| |
| #include <fcntl.h> |
| #include <sys/ioctl.h> |
| #include <sys/mount.h> |
| #include <sys/stat.h> |
| #include <sys/types.h> |
| #include <unistd.h> |
| |
| #include "verity/logging.h" |
| |
| namespace simple_file { |
| |
| class Env { |
| public: |
| Env(); |
| virtual ~Env() {} |
| // Wraps open(2). Use umask(2) (Env::Umask) to set the mode for file creation. |
| virtual int Open(const char* pathname, int flags) const { |
| return open(pathname, flags); |
| } |
| virtual int Create(const char* pathname, int flags, mode_t mode) const { |
| return open(pathname, flags, mode); |
| } |
| virtual mode_t Umask(mode_t mask) const { return umask(mask); } |
| virtual int Close(int fd) const { return close(fd); } |
| virtual int Fstat(int fd, struct stat* buf) const { return fstat(fd, buf); } |
| virtual off_t Lseek(int fd, off_t offset, int whence) const { |
| return lseek(fd, offset, whence); |
| } |
| virtual ssize_t Read(int fd, void* buf, size_t count) const { |
| return read(fd, buf, count); |
| } |
| virtual ssize_t Pread(int fd, void* buf, size_t count, off_t offset) const { |
| return pread(fd, buf, count, offset); |
| } |
| virtual ssize_t Pwrite(int fd, |
| const void* buf, |
| size_t count, |
| off_t offset) const { |
| return pwrite(fd, buf, count, offset); |
| } |
| virtual ssize_t Write(int fd, const void* buf, size_t count) const { |
| return write(fd, buf, count); |
| } |
| |
| // Wrap less defined behavior. |
| virtual int BlockDevSize(int fd, int64_t* size) const { |
| return ioctl(fd, BLKGETSIZE64, size); |
| } |
| }; |
| |
| } // namespace simple_file |
| #endif // VERITY_SIMPLE_FILE_ENV_H__ |