Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: native_client_sdk/src/libraries/nacl_io/mount_node.cc

Issue 16232016: [NaCl SDK] nacl_io: big refactor to return error value (errno). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/libraries/nacl_io/mount_node.cc
diff --git a/native_client_sdk/src/libraries/nacl_io/mount_node.cc b/native_client_sdk/src/libraries/nacl_io/mount_node.cc
index ff722b44eb5c7d40e271e7e2f38b6b1882daaaa4..85ebc931d3b276d0e41424e71f0706aa4c0888c0 100644
--- a/native_client_sdk/src/libraries/nacl_io/mount_node.cc
+++ b/native_client_sdk/src/libraries/nacl_io/mount_node.cc
@@ -18,8 +18,7 @@
static const int USR_ID = 1001;
static const int GRP_ID = 1002;
-MountNode::MountNode(Mount* mount)
- : mount_(mount) {
+MountNode::MountNode(Mount* mount) : mount_(mount) {
memset(&stat_, 0, sizeof(stat_));
stat_.st_gid = GRP_ID;
stat_.st_uid = USR_ID;
@@ -32,12 +31,11 @@ MountNode::MountNode(Mount* mount)
stat_.st_ino = 1;
}
-MountNode::~MountNode() {
-}
+MountNode::~MountNode() {}
-bool MountNode::Init(int perm) {
+Error MountNode::Init(int perm) {
stat_.st_mode |= perm;
- return true;
+ return 0;
}
void MountNode::Destroy() {
@@ -46,119 +44,110 @@ void MountNode::Destroy() {
}
}
-int MountNode::FSync() {
- return 0;
-}
+Error MountNode::FSync() { return 0; }
-int MountNode::FTruncate(off_t length) {
- errno = EINVAL;
- return -1;
+Error MountNode::FTruncate(off_t length) {
+ return EINVAL;
}
-int MountNode::GetDents(size_t offs, struct dirent* pdir, size_t count) {
- errno = ENOTDIR;
- return -1;
+Error MountNode::GetDents(size_t offs,
+ struct dirent* pdir,
+ size_t count,
+ int* out_bytes) {
+ *out_bytes = 0;
+ return ENOTDIR;
}
-int MountNode::GetStat(struct stat* pstat) {
+Error MountNode::GetStat(struct stat* pstat) {
AutoLock lock(&lock_);
memcpy(pstat, &stat_, sizeof(stat_));
return 0;
}
-int MountNode::Ioctl(int request, char* arg) {
- errno = EINVAL;
- return -1;
+Error MountNode::Ioctl(int request, char* arg) {
+ return EINVAL;
}
-int MountNode::Read(size_t offs, void* buf, size_t count) {
- errno = EINVAL;
- return -1;
+Error MountNode::Read(size_t offs, void* buf, size_t count, int* out_bytes) {
+ *out_bytes = 0;
+ return EINVAL;
}
-int MountNode::Write(size_t offs, const void* buf, size_t count) {
- errno = EINVAL;
- return -1;
+Error MountNode::Write(size_t offs,
+ const void* buf,
+ size_t count,
+ int* out_bytes) {
+ *out_bytes = 0;
+ return EINVAL;
}
-void* MountNode::MMap(void* addr, size_t length, int prot, int flags,
- size_t offset) {
+Error MountNode::MMap(void* addr,
+ size_t length,
+ int prot,
+ int flags,
+ size_t offset,
+ void** out_addr) {
+ *out_addr = NULL;
+
// Never allow mmap'ing PROT_EXEC. The passthrough node supports this, but we
// don't. Fortunately, glibc will fallback if this fails, so dlopen will
// continue to work.
- if (prot & PROT_EXEC) {
- errno = EPERM;
- return MAP_FAILED;
- }
+ if (prot & PROT_EXEC)
+ return EPERM;
// This default mmap support is just enough to make dlopen work.
// This implementation just reads from the mount into the mmap'd memory area.
void* new_addr = addr;
- int err = _real_mmap(&new_addr, length, prot | PROT_WRITE, flags |
- MAP_ANONYMOUS, -1, 0);
+ int mmap_error = _real_mmap(
+ &new_addr, length, prot | PROT_WRITE, flags | MAP_ANONYMOUS, -1, 0);
if (new_addr == MAP_FAILED) {
_real_munmap(new_addr, length);
- errno = err;
- return MAP_FAILED;
+ return mmap_error;
}
- ssize_t cnt = Read(offset, new_addr, length);
- if (cnt == -1) {
+ ssize_t bytes_read;
+ Error read_error = Read(offset, new_addr, length, &bytes_read);
+ if (read_error) {
_real_munmap(new_addr, length);
- errno = ENOSYS;
- return MAP_FAILED;
+ return read_error;
}
- return new_addr;
-}
-
-int MountNode::GetLinks() {
- return stat_.st_nlink;
+ *out_addr = new_addr;
+ return 0;
}
-int MountNode::GetMode() {
- return stat_.st_mode & ~S_IFMT;
-}
+int MountNode::GetLinks() { return stat_.st_nlink; }
-size_t MountNode::GetSize() {
- return stat_.st_size;
-}
+int MountNode::GetMode() { return stat_.st_mode & ~S_IFMT; }
-int MountNode::GetType() {
- return stat_.st_mode & S_IFMT;
+Error MountNode::GetSize(size_t* out_size) {
+ *out_size = stat_.st_size;
+ return 0;
}
-bool MountNode::IsaDir() {
- return (stat_.st_mode & S_IFDIR) != 0;
-}
+int MountNode::GetType() { return stat_.st_mode & S_IFMT; }
-bool MountNode::IsaFile() {
- return (stat_.st_mode & S_IFREG) != 0;
-}
+bool MountNode::IsaDir() { return (stat_.st_mode & S_IFDIR) != 0; }
-bool MountNode::IsaTTY() {
- return (stat_.st_mode & S_IFCHR) != 0;
-}
+bool MountNode::IsaFile() { return (stat_.st_mode & S_IFREG) != 0; }
+bool MountNode::IsaTTY() { return (stat_.st_mode & S_IFCHR) != 0; }
-int MountNode:: AddChild(const std::string& name, MountNode* node) {
- errno = ENOTDIR;
- return -1;
+Error MountNode::AddChild(const std::string& name, MountNode* node) {
+ return ENOTDIR;
}
-int MountNode::RemoveChild(const std::string& name) {
- errno = ENOTDIR;
- return -1;
+Error MountNode::RemoveChild(const std::string& name) {
+ return ENOTDIR;
}
-MountNode* MountNode::FindChild(const std::string& name) {
- errno = ENOTDIR;
- return NULL;
+Error MountNode::FindChild(const std::string& name, MountNode** out_node) {
+ *out_node = NULL;
+ return ENOTDIR;
}
int MountNode::ChildCount() {
- errno = ENOTDIR;
- return -1;
+ return 0;
noelallen1 2013/06/07 21:48:43 Not ENOTDIR?
binji 2013/06/07 23:23:11 No, I figure that returning an error from ChildCou
}
void MountNode::Link() {

Powered by Google App Engine
This is Rietveld 408576698