| Index: native_client_sdk/src/libraries/nacl_mounts/mount_node_dir.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_mounts/mount_node_dir.cc b/native_client_sdk/src/libraries/nacl_mounts/mount_node_dir.cc
|
| deleted file mode 100644
|
| index 230592ce66e57f347b3f090b79d5dae08df11574..0000000000000000000000000000000000000000
|
| --- a/native_client_sdk/src/libraries/nacl_mounts/mount_node_dir.cc
|
| +++ /dev/null
|
| @@ -1,137 +0,0 @@
|
| -/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -#include "nacl_mounts/mount_node_dir.h"
|
| -
|
| -#include <errno.h>
|
| -#include <string.h>
|
| -
|
| -#include "nacl_mounts/osdirent.h"
|
| -#include "nacl_mounts/osstat.h"
|
| -#include "utils/macros.h"
|
| -#include "utils/auto_lock.h"
|
| -
|
| -MountNodeDir::MountNodeDir(Mount* mount)
|
| - : MountNode(mount),
|
| - cache_(NULL) {
|
| - stat_.st_mode |= S_IFDIR;
|
| -}
|
| -
|
| -MountNodeDir::~MountNodeDir() {
|
| - free(cache_);
|
| -}
|
| -
|
| -int MountNodeDir::Read(size_t offs, void *buf, size_t count) {
|
| - errno = EISDIR;
|
| - return -1;
|
| -}
|
| -
|
| -int MountNodeDir::Truncate(size_t size) {
|
| - errno = EISDIR;
|
| - return -1;
|
| -}
|
| -
|
| -int MountNodeDir::Write(size_t offs, void *buf, size_t count) {
|
| - errno = EISDIR;
|
| - return -1;
|
| -}
|
| -
|
| -int MountNodeDir::GetDents(size_t offs, struct dirent* pdir, size_t size) {
|
| - AutoLock lock(&lock_);
|
| -
|
| - // If the buffer pointer is invalid, fail
|
| - if (NULL == pdir) {
|
| - errno = EINVAL;
|
| - return -1;
|
| - }
|
| -
|
| - // If the buffer is too small, fail
|
| - if (size < sizeof(struct dirent)) {
|
| - errno = EINVAL;
|
| - return -1;
|
| - }
|
| -
|
| - // Force size to a multiple of dirent
|
| - size -= size % sizeof(struct dirent);
|
| - size_t max = map_.size() * sizeof(struct dirent);
|
| - if (cache_ == NULL) BuildCache();
|
| -
|
| - if (offs >= max) return 0;
|
| - if (offs + size >= max) size = max - offs;
|
| -
|
| - memcpy(pdir, ((char *) cache_) + offs, size);
|
| - return size;
|
| -}
|
| -
|
| -int MountNodeDir::AddChild(const std::string& name, MountNode* node) {
|
| - AutoLock lock(&lock_);
|
| -
|
| - if (name.empty()) {
|
| - errno = ENOENT;
|
| - return -1;
|
| - }
|
| - if (name.length() >= MEMBER_SIZE(struct dirent, d_name)) {
|
| - errno = ENAMETOOLONG;
|
| - return -1;
|
| - }
|
| -
|
| - MountNodeMap_t::iterator it = map_.find(name);
|
| - if (it != map_.end()) {
|
| - errno = EEXIST;
|
| - return -1;
|
| - }
|
| -
|
| - node->Link();
|
| - map_[name] = node;
|
| - ClearCache();
|
| - return 0;
|
| -}
|
| -
|
| -int MountNodeDir::RemoveChild(const std::string& name) {
|
| - AutoLock lock(&lock_);
|
| - MountNodeMap_t::iterator it = map_.find(name);
|
| - if (it != map_.end()) {
|
| - it->second->Unlink();
|
| - map_.erase(it);
|
| - ClearCache();
|
| - return 0;
|
| - }
|
| - errno = ENOENT;
|
| - return -1;
|
| -}
|
| -
|
| -MountNode* MountNodeDir::FindChild(const std::string& name) {
|
| - AutoLock lock(&lock_);
|
| - MountNodeMap_t::iterator it = map_.find(name);
|
| - if (it != map_.end()) {
|
| - return it->second;
|
| - }
|
| - errno = ENOENT;
|
| - return NULL;
|
| -}
|
| -
|
| -int MountNodeDir::ChildCount() {
|
| - AutoLock lock(&lock_);
|
| - return map_.size();
|
| -}
|
| -
|
| -void MountNodeDir::ClearCache() {
|
| - free(cache_);
|
| - cache_ = NULL;
|
| -}
|
| -
|
| -void MountNodeDir::BuildCache() {
|
| - if (map_.size()) {
|
| - cache_ = (struct dirent *) malloc(sizeof(struct dirent) * map_.size());
|
| - MountNodeMap_t::iterator it = map_.begin();
|
| - for (size_t index = 0; it != map_.end(); it++, index++) {
|
| - MountNode* node = it->second;
|
| - size_t len = it->first.length();
|
| - cache_[index].d_ino = node->stat_.st_ino;
|
| - cache_[index].d_reclen = sizeof(struct dirent);
|
| - cache_[index].d_name[len] = 0;
|
| - strncpy(cache_[index].d_name, &it->first[0], len);
|
| - }
|
| - }
|
| -}
|
|
|