Chromium Code Reviews| Index: native_client_sdk/src/libraries/nacl_io/kernel_object.cc |
| diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_object.cc b/native_client_sdk/src/libraries/nacl_io/kernel_object.cc |
| index fccc5c85fd0cfe7da600482c4d9103531b2266ff..1c495804e9badfd62002b98a5da8934fc3095eef 100644 |
| --- a/native_client_sdk/src/libraries/nacl_io/kernel_object.cc |
| +++ b/native_client_sdk/src/libraries/nacl_io/kernel_object.cc |
| @@ -152,6 +152,17 @@ Error KernelObject::GetFDFlags(int fd, int* out_flags) { |
| return 0; |
| } |
| +std::string KernelObject::GetFDPath(int fd) { |
| + AUTO_LOCK(handle_lock_); |
| + |
| + FdPathMap_t::iterator iter = fd_paths_.find(fd); |
| + if (iter == fd_paths_.end()) { |
|
binji
2014/01/07 21:40:29
nit: no braces for single-line ifs
|
| + return ""; |
|
binji
2014/01/07 21:40:29
return std::string();
|
| + } |
| + |
| + return iter->second; |
| +} |
| + |
| Error KernelObject::SetFDFlags(int fd, int flags) { |
| AUTO_LOCK(handle_lock_); |
| if (fd < 0 || fd >= static_cast<int>(handle_map_.size())) |
| @@ -179,7 +190,8 @@ Error KernelObject::AcquireHandle(int fd, ScopedKernelHandle* out_handle) { |
| return EBADF; |
| } |
| -int KernelObject::AllocateFD(const ScopedKernelHandle& handle) { |
| +int KernelObject::AllocateFD(const ScopedKernelHandle& handle, |
| + std::string path) { |
| AUTO_LOCK(handle_lock_); |
| int id; |
| @@ -196,6 +208,12 @@ int KernelObject::AllocateFD(const ScopedKernelHandle& handle) { |
| id = handle_map_.size(); |
| handle_map_.push_back(descriptor); |
| } |
| + // With our final fd identifier, we insert into our fd_paths_ mapping as long |
| + // as path is non-NULL. |
| + if (!path.empty()) { |
| + std::string abs_path = GetAbsParts(path).Join(); |
| + fd_paths_[id] = abs_path; |
|
binji
2014/01/07 21:40:29
nit: fs_paths_[id] = GetAbsParts(path).Join();
|
| + } |
| return id; |
| } |
| @@ -221,6 +239,9 @@ void KernelObject::FreeFD(int fd) { |
| // Force lower numbered FD to be available first. |
| std::push_heap(free_fds_.begin(), free_fds_.end(), std::greater<int>()); |
| + // |
| + // Remove the FD from the map of fd to absolute path |
| + fd_paths_.erase(fd); |
| } |
| } // namespace nacl_io |