Mercurial > minori
comparison dep/animone/src/fd/xnu.cc @ 299:246017a7907a
dep/animone: clean up OS X code
GetProcessName() really belongs in fd.cc after removing the
stupid unnecessary LaunchServices code that was stolen from...
some library :)
| author | Paper <paper@paper.us.eu.org> |
|---|---|
| date | Mon, 13 May 2024 14:15:47 -0400 |
| parents | 0718f538c5f9 |
| children | b1f625b0227c |
comparison
equal
deleted
inserted
replaced
| 298:dec4d3c9a909 | 299:246017a7907a |
|---|---|
| 89 } | 89 } |
| 90 | 90 |
| 91 return true; | 91 return true; |
| 92 } | 92 } |
| 93 | 93 |
| 94 static bool GetProcessNameFromProcPidPath(pid_t pid, std::string& result) { | |
| 95 result.assign(PROC_PIDPATHINFO_MAXSIZE, '\0'); | |
| 96 | |
| 97 int ret = proc_pidpath(pid, result.data(), result.size() * sizeof(char)); | |
| 98 if (ret <= 0) | |
| 99 return false; | |
| 100 | |
| 101 /* find the last slash, if there's none, we're done here */ | |
| 102 size_t last_slash = result.rfind('/'); | |
| 103 if (last_slash == std::string::npos) | |
| 104 return true; | |
| 105 | |
| 106 result.erase(0, last_slash + 1); | |
| 107 return true; | |
| 108 } | |
| 109 | |
| 110 static bool GetProcessNameFromProcName(pid_t pid, std::string& result) { | |
| 111 result.assign(2 * MAXCOMLEN, '\0'); | |
| 112 | |
| 113 int size = proc_name(pid, &result.front(), result.length()); | |
| 114 | |
| 115 /* if size is MAXCOMLEN or 2 * MAXCOMLEN, assume | |
| 116 * this method won't work and our result is truncated */ | |
| 117 if (size <= 0 || size == MAXCOMLEN || size == 2 * MAXCOMLEN) | |
| 118 return false; | |
| 119 | |
| 120 result.resize(size); | |
| 121 return true; | |
| 122 } | |
| 123 | |
| 124 bool GetProcessName(pid_t pid, std::string& result) { | |
| 125 if (GetProcessNameFromProcName(pid, result)) | |
| 126 return true; | |
| 127 | |
| 128 if (GetProcessNameFromProcPidPath(pid, result)) | |
| 129 return true; | |
| 130 | |
| 131 return false; | |
| 132 } | |
| 133 | |
| 94 } // namespace animone::internal::xnu | 134 } // namespace animone::internal::xnu |
