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

Side by Side Diff: native_client_sdk/src/libraries/nacl_io/kernel_object.cc

Issue 565763002: Plumbing though mode parameter to open, since fusefs can make use of it. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixes Created 6 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "nacl_io/kernel_object.h" 5 #include "nacl_io/kernel_object.h"
6 6
7 #include <assert.h> 7 #include <assert.h>
8 #include <errno.h> 8 #include <errno.h>
9 #include <fcntl.h> 9 #include <fcntl.h>
10 #include <pthread.h> 10 #include <pthread.h>
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 return 0; 92 return 0;
93 } 93 }
94 } 94 }
95 95
96 return ENOTDIR; 96 return ENOTDIR;
97 } 97 }
98 98
99 // Given a path, acquire the associated filesystem and node, creating the 99 // Given a path, acquire the associated filesystem and node, creating the
100 // node if needed based on the provided flags. 100 // node if needed based on the provided flags.
101 Error KernelObject::AcquireFsAndNode(const std::string& path, 101 Error KernelObject::AcquireFsAndNode(const std::string& path,
102 int oflags, 102 int oflags, mode_t mflags,
103 ScopedFilesystem* out_fs, 103 ScopedFilesystem* out_fs,
104 ScopedNode* out_node) { 104 ScopedNode* out_node) {
105 Path rel_parts; 105 Path rel_parts;
106 out_fs->reset(NULL); 106 out_fs->reset(NULL);
107 out_node->reset(NULL); 107 out_node->reset(NULL);
108 Error error = AcquireFsAndRelPath(path, out_fs, &rel_parts); 108 Error error = AcquireFsAndRelPath(path, out_fs, &rel_parts);
109 if (error) 109 if (error)
110 return error; 110 return error;
111 111
112 error = (*out_fs)->Open(rel_parts, oflags, out_node); 112 error = (*out_fs)->OpenWithMode(rel_parts, oflags, mflags, out_node);
113 if (error) 113 if (error)
114 return error; 114 return error;
115 115
116 return 0; 116 return 0;
117 } 117 }
118 118
119 Path KernelObject::GetAbsParts(const std::string& path) { 119 Path KernelObject::GetAbsParts(const std::string& path) {
120 AUTO_LOCK(cwd_lock_); 120 AUTO_LOCK(cwd_lock_);
121 121
122 Path abs_parts; 122 Path abs_parts;
(...skipping 13 matching lines...) Expand all
136 136
137 return out; 137 return out;
138 } 138 }
139 139
140 Error KernelObject::SetCWD(const std::string& path) { 140 Error KernelObject::SetCWD(const std::string& path) {
141 std::string abs_path = GetAbsParts(path).Join(); 141 std::string abs_path = GetAbsParts(path).Join();
142 142
143 ScopedFilesystem fs; 143 ScopedFilesystem fs;
144 ScopedNode node; 144 ScopedNode node;
145 145
146 Error error = AcquireFsAndNode(abs_path, O_RDONLY, &fs, &node); 146 Error error = AcquireFsAndNode(abs_path, O_RDONLY, 0, &fs, &node);
147 if (error) 147 if (error)
148 return error; 148 return error;
149 149
150 if ((node->GetType() & S_IFDIR) == 0) 150 if ((node->GetType() & S_IFDIR) == 0)
151 return ENOTDIR; 151 return ENOTDIR;
152 152
153 AUTO_LOCK(cwd_lock_); 153 AUTO_LOCK(cwd_lock_);
154 cwd_ = abs_path; 154 cwd_ = abs_path;
155 return 0; 155 return 0;
156 } 156 }
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 AUTO_LOCK(handle_lock_); 254 AUTO_LOCK(handle_lock_);
255 255
256 handle_map_[fd].handle.reset(NULL); 256 handle_map_[fd].handle.reset(NULL);
257 free_fds_.push_back(fd); 257 free_fds_.push_back(fd);
258 258
259 // Force lower numbered FD to be available first. 259 // Force lower numbered FD to be available first.
260 std::push_heap(free_fds_.begin(), free_fds_.end(), std::greater<int>()); 260 std::push_heap(free_fds_.begin(), free_fds_.end(), std::greater<int>());
261 } 261 }
262 262
263 } // namespace nacl_io 263 } // namespace nacl_io
OLDNEW
« no previous file with comments | « native_client_sdk/src/libraries/nacl_io/kernel_object.h ('k') | native_client_sdk/src/libraries/nacl_io/kernel_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698