Mercurial > minori
comparison dep/animia/src/fd/xnu.cc @ 157:18c8eb5d1edc
x11: make it work
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Thu, 16 Nov 2023 16:51:34 -0500 |
| parents | cdf79282d647 |
| children | 900b5b530883 |
comparison
equal
deleted
inserted
replaced
| 156:cdf79282d647 | 157:18c8eb5d1edc |
|---|---|
| 17 #include <sys/user.h> | 17 #include <sys/user.h> |
| 18 | 18 |
| 19 namespace animia::internal::xnu { | 19 namespace animia::internal::xnu { |
| 20 | 20 |
| 21 static std::string GetProcessName(pid_t pid) { | 21 static std::string GetProcessName(pid_t pid) { |
| 22 struct proc_bsdinfo proc; | 22 char name[2*MAXCOMLEN]; |
| 23 proc_name(pid, name, sizeof(name)); | |
| 23 | 24 |
| 24 int st = proc_pidinfo(pid, PROC_PIDTBSDINFO, 0, &proc, PROC_PIDTBSDINFO_SIZE); | 25 return name; |
| 25 if (st != PROC_PIDTBSDINFO_SIZE) | |
| 26 return ""; | |
| 27 | |
| 28 return (proc.pbi_name[0]) ? proc.pbi_name : proc.pbi_comm; | |
| 29 } | 26 } |
| 30 | 27 |
| 31 bool XnuFdTools::EnumerateOpenProcesses(process_proc_t process_proc) { | 28 bool XnuFdTools::EnumerateOpenProcesses(process_proc_t process_proc) { |
| 32 std::vector<pid_t> pids; | 29 std::vector<pid_t> pids; |
| 33 pids.reserve(1024); | 30 pids.reserve(1024); |
| 36 returned_size = proc_listpids(PROC_ALL_PIDS, 0, pids.data(), pids.capacity() * sizeof(pid_t)); | 33 returned_size = proc_listpids(PROC_ALL_PIDS, 0, pids.data(), pids.capacity() * sizeof(pid_t)); |
| 37 if (returned_size == -1) | 34 if (returned_size == -1) |
| 38 return false; | 35 return false; |
| 39 } | 36 } |
| 40 | 37 |
| 41 for (int i = 0; i < size / sizeof(*pids); i++) { | 38 for (const auto& pid : pids) { |
| 42 const pid_t pid = pids[i].kp_proc.p_pid; | |
| 43 if (!process_proc({pid, GetProcessName(pid)})) | 39 if (!process_proc({pid, GetProcessName(pid)})) |
| 44 return false; | 40 return false; |
| 45 } | 41 } |
| 46 | 42 |
| 47 return true; | 43 return true; |
