| Index: native_client_sdk/src/libraries/nacl_io/passthroughfs/passthrough_fs.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_io/passthroughfs/passthrough_fs.cc b/native_client_sdk/src/libraries/nacl_io/passthroughfs/passthrough_fs.cc
|
| index 52c5f961f98f48bc52f51442084c629d7a8f1d6e..93dbf1867280c278cb6d629605bed4f8ec8591f2 100644
|
| --- a/native_client_sdk/src/libraries/nacl_io/passthroughfs/passthrough_fs.cc
|
| +++ b/native_client_sdk/src/libraries/nacl_io/passthroughfs/passthrough_fs.cc
|
| @@ -8,120 +8,10 @@
|
|
|
| #include "nacl_io/kernel_handle.h"
|
| #include "nacl_io/kernel_wrap_real.h"
|
| +#include "nacl_io/passthroughfs/real_node.h"
|
|
|
| namespace nacl_io {
|
|
|
| -class PassthroughFsNode : public Node {
|
| - public:
|
| - explicit PassthroughFsNode(Filesystem* filesystem, int real_fd)
|
| - : Node(filesystem), real_fd_(real_fd) {}
|
| -
|
| - protected:
|
| - virtual Error Init(int flags) { return 0; }
|
| -
|
| - virtual void Destroy() {
|
| - if (real_fd_)
|
| - _real_close(real_fd_);
|
| - real_fd_ = 0;
|
| - }
|
| -
|
| - public:
|
| - // Normal read/write operations on a file
|
| - virtual Error Read(const HandleAttr& attr,
|
| - void* buf,
|
| - size_t count,
|
| - int* out_bytes) {
|
| - *out_bytes = 0;
|
| -
|
| - int64_t new_offset;
|
| - int err = _real_lseek(real_fd_, attr.offs, 0, &new_offset);
|
| - if (err)
|
| - return err;
|
| -
|
| - size_t nread;
|
| - err = _real_read(real_fd_, buf, count, &nread);
|
| - if (err)
|
| - return err;
|
| -
|
| - *out_bytes = static_cast<int>(nread);
|
| - return 0;
|
| - }
|
| -
|
| - virtual Error Write(const HandleAttr& attr,
|
| - const void* buf,
|
| - size_t count,
|
| - int* out_bytes) {
|
| - *out_bytes = 0;
|
| -
|
| - int64_t new_offset;
|
| - int err = _real_lseek(real_fd_, attr.offs, 0, &new_offset);
|
| - if (err)
|
| - return err;
|
| -
|
| - size_t nwrote;
|
| - err = _real_write(real_fd_, buf, count, &nwrote);
|
| - if (err)
|
| - return err;
|
| -
|
| - *out_bytes = static_cast<int>(nwrote);
|
| - return 0;
|
| - }
|
| -
|
| - virtual Error FTruncate(off_t size) {
|
| - // TODO(binji): what to do here?
|
| - return ENOSYS;
|
| - }
|
| -
|
| - virtual Error GetDents(size_t offs,
|
| - struct dirent* pdir,
|
| - size_t count,
|
| - int* out_bytes) {
|
| - size_t nread;
|
| - int err = _real_getdents(real_fd_, pdir, count, &nread);
|
| - if (err)
|
| - return err;
|
| - return nread;
|
| - }
|
| -
|
| - virtual Error GetStat(struct stat* stat) {
|
| - int err = _real_fstat(real_fd_, stat);
|
| - if (err)
|
| - return err;
|
| - return 0;
|
| - }
|
| -
|
| - virtual Error Isatty() {
|
| -#ifdef __GLIBC__
|
| - // isatty is not yet hooked up to the IRT interface under glibc.
|
| - return ENOTTY;
|
| -#else
|
| - int result = 0;
|
| - int err = _real_isatty(real_fd_, &result);
|
| - if (err)
|
| - return err;
|
| - return 0;
|
| -#endif
|
| - }
|
| -
|
| - Error MMap(void* addr,
|
| - size_t length,
|
| - int prot,
|
| - int flags,
|
| - size_t offset,
|
| - void** out_addr) {
|
| - *out_addr = addr;
|
| - int err = _real_mmap(out_addr, length, prot, flags, real_fd_, offset);
|
| - if (err)
|
| - return err;
|
| - return 0;
|
| - }
|
| -
|
| - private:
|
| - friend class PassthroughFs;
|
| -
|
| - int real_fd_;
|
| -};
|
| -
|
| PassthroughFs::PassthroughFs() {
|
| }
|
|
|
| @@ -144,7 +34,7 @@ Error PassthroughFs::Open(const Path& path, int mode, ScopedNode* out_node) {
|
| if (error)
|
| return error;
|
|
|
| - out_node->reset(new PassthroughFsNode(this, real_fd));
|
| + out_node->reset(new RealNode(this, real_fd, true));
|
| return 0;
|
| }
|
|
|
| @@ -155,7 +45,7 @@ Error PassthroughFs::OpenResource(const Path& path, ScopedNode* out_node) {
|
| if (error)
|
| return error;
|
|
|
| - out_node->reset(new PassthroughFsNode(this, real_fd));
|
| + out_node->reset(new RealNode(this, real_fd));
|
| return 0;
|
| }
|
|
|
|
|