Mercurial > minori
comparison dep/animia/src/fd/win32.cc @ 150:ffa535b6d630
*: avoid usage of std::[pair,tuple]
https://arne-mertz.de/2017/03/smelly-pair-tuple/
it's better to use real structures and such where variables are easily known...
also apparently using [] on structs is actually valid? I had no idea.
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Tue, 14 Nov 2023 16:27:33 -0500 |
| parents | aa4df5a84338 |
| children | 54744a48a7d7 |
comparison
equal
deleted
inserted
replaced
| 149:e41505d24733 | 150:ffa535b6d630 |
|---|---|
| 222 } | 222 } |
| 223 | 223 |
| 224 bool Win32FdTools::GetProcessName(pid_t pid, std::string& result) { | 224 bool Win32FdTools::GetProcessName(pid_t pid, std::string& result) { |
| 225 unsigned long ret_size = 0; // size given by GetModuleBaseNameW | 225 unsigned long ret_size = 0; // size given by GetModuleBaseNameW |
| 226 Handle handle(::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid)); | 226 Handle handle(::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid)); |
| 227 if (!handle.get()) | 227 if (handle.get() == INVALID_HANDLE_VALUE) |
| 228 return false; | 228 return false; |
| 229 | 229 |
| 230 /* agh... */ | 230 /* agh... */ |
| 231 std::wstring ret(256, L'\0'); | 231 std::wstring ret(256, L'\0'); |
| 232 for (; ret.length() < 32768; ret.resize(ret.length() * 2)) { | 232 for (; ret.length() < 32768; ret.resize(ret.length() * 2)) { |
| 241 | 241 |
| 242 return true; | 242 return true; |
| 243 } | 243 } |
| 244 | 244 |
| 245 /* this could be changed to being a callback, but... I'm too lazy right now :) */ | 245 /* this could be changed to being a callback, but... I'm too lazy right now :) */ |
| 246 bool Win32FdTools::EnumerateOpenFiles(const std::set<pid_t>& pids, std::vector<std::pair<pid_t, std::string>>& files) { | 246 bool Win32FdTools::EnumerateOpenFiles(const std::set<pid_t>& pids, std::vector<OpenFile>& files) { |
| 247 std::unordered_map<pid_t, Handle> proc_handles; | 247 std::unordered_map<pid_t, Handle> proc_handles; |
| 248 | 248 |
| 249 for (const pid_t& pid : pids) { | 249 for (const pid_t& pid : pids) { |
| 250 const HANDLE handle = ::OpenProcess(PROCESS_DUP_HANDLE, false, pid); | 250 const HANDLE handle = ::OpenProcess(PROCESS_DUP_HANDLE, false, pid); |
| 251 if (handle) | 251 if (handle != INVALID_HANDLE_VALUE) |
| 252 proc_handles[pid] = Handle(handle); | 252 proc_handles[pid] = Handle(handle); |
| 253 } | 253 } |
| 254 | 254 |
| 255 if (proc_handles.empty()) | 255 if (proc_handles.empty()) |
| 256 return false; | 256 return false; |
| 267 | 267 |
| 268 if (!IsFileMaskOk(h.GrantedAccess)) | 268 if (!IsFileMaskOk(h.GrantedAccess)) |
| 269 continue; | 269 continue; |
| 270 | 270 |
| 271 Handle handle(DuplicateHandle(proc_handles[pid].get(), h.HandleValue)); | 271 Handle handle(DuplicateHandle(proc_handles[pid].get(), h.HandleValue)); |
| 272 if (!handle.get()) | 272 if (handle.get() == INVALID_HANDLE_VALUE) |
| 273 continue; | 273 continue; |
| 274 | 274 |
| 275 if (GetFileType(handle.get()) != FILE_TYPE_DISK) | 275 if (GetFileType(handle.get()) != FILE_TYPE_DISK) |
| 276 continue; | 276 continue; |
| 277 | 277 |
| 278 const std::string path = GetFinalPathNameByHandle(handle.get()); | 278 const std::string path = GetFinalPathNameByHandle(handle.get()); |
| 279 if (!IsFilePathOk(path)) | 279 if (!IsFilePathOk(path)) |
| 280 continue; | 280 continue; |
| 281 | 281 |
| 282 /* create an empty vector if it doesn't exist, probably unnecessary */ | 282 OpenFile file; |
| 283 files.push_back({pid, path}); | 283 file.pid = pid; |
| 284 file.path = path; | |
| 285 | |
| 286 files.push_back(file); | |
| 284 } | 287 } |
| 285 | 288 |
| 286 return true; | 289 return true; |
| 287 } | 290 } |
| 288 | 291 |
