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 |