diff dep/animone/src/fd/xnu.cc @ 301:b1f625b0227c

*: convert all files CRLF -> LF some files were in DOS format, others were in unix. now everything (that at least is under our control) should all be the same format
author Paper <paper@paper.us.eu.org>
date Mon, 13 May 2024 15:04:51 -0400
parents 246017a7907a
children a4257370de16
line wrap: on
line diff
--- a/dep/animone/src/fd/xnu.cc	Mon May 13 14:56:37 2024 -0400
+++ b/dep/animone/src/fd/xnu.cc	Mon May 13 15:04:51 2024 -0400
@@ -1,134 +1,134 @@
-#include "animone/fd/xnu.h"
-#include "animone.h"
-#include "animone/util/osx.h"
-
-#include <cassert>
-#include <memory>
-#include <string>
-#include <unordered_map>
-#include <vector>
-
-#include <fcntl.h>
-#include <libproc.h>
-#include <sys/sysctl.h>
-#include <sys/types.h>
-#include <sys/user.h>
-
-/* you may be asking: WTF is FWRITE?
- * well, from bsd/sys/fcntl.h in the XNU kernel:
- *
- *    Kernel encoding of open mode; separate read and write bits that are
- *    independently testable: 1 greater than [O_RDONLY and O_WRONLY].
- *
- * It's just how the kernel defines write mode.
-*/
-#ifndef FWRITE
-#define FWRITE	0x0002
-#endif
-
-namespace animone::internal::xnu {
-
-bool EnumerateOpenProcesses(process_proc_t process_proc) {
-	size_t pids_size = 256;
-	std::unique_ptr<pid_t[]> pids;
-
-	int returned_size = 0;
-	do {
-		pids.reset(new pid_t[pids_size *= 2]);
-		returned_size = proc_listpids(PROC_ALL_PIDS, 0, pids.get(), pids_size * sizeof(pid_t));
-		if (returned_size == -1)
-			return false;
-	} while ((pids_size * sizeof(size_t)) < returned_size);
-
-	for (int i = 0; i < pids_size; i++) {
-		std::string result;
-		osx::util::GetProcessName(pids[i], result);
-		if (!process_proc({pids[i], result}))
-			return false;
-	}
-
-	return true;
-}
-
-bool EnumerateOpenFiles(const std::set<pid_t>& pids, open_file_proc_t open_file_proc) {
-	if (!open_file_proc)
-		return false;
-
-	for (const auto& pid : pids) {
-		const int bufsz = proc_pidinfo(pid, PROC_PIDLISTFDS, 0, NULL, 0);
-		if (bufsz < 0)
-			return false;
-
-		const size_t info_len = bufsz / sizeof(struct proc_fdinfo);
-		if (info_len < 1)
-			return false;
-
-		std::unique_ptr<struct proc_fdinfo[]> info(new struct proc_fdinfo[info_len]);
-		if (!info)
-			return false;
-
-		proc_pidinfo(pid, PROC_PIDLISTFDS, 0, info.get(), bufsz);
-
-		for (size_t i = 0; i < info_len; i++) {
-			if (info[i].proc_fdtype == PROX_FDTYPE_VNODE) {
-				struct vnode_fdinfowithpath vnodeInfo;
-
-				int sz = proc_pidfdinfo(pid, info[i].proc_fd, PROC_PIDFDVNODEPATHINFO, &vnodeInfo,
-				                        PROC_PIDFDVNODEPATHINFO_SIZE);
-				if (sz != PROC_PIDFDVNODEPATHINFO_SIZE)
-					return false;
-
-				/* why would a media player open a file in write mode? */
-				if (vnodeInfo.pfi.fi_openflags & FWRITE)
-					continue;
-
-				if (!open_file_proc({pid, vnodeInfo.pvip.vip_path}))
-					return false;
-			}
-		}
-	}
-
-	return true;
-}
-
-static bool GetProcessNameFromProcPidPath(pid_t pid, std::string& result) {
-	result.assign(PROC_PIDPATHINFO_MAXSIZE, '\0');
-
-	int ret = proc_pidpath(pid, result.data(), result.size() * sizeof(char));
-	if (ret <= 0)
-		return false;
-
-	/* find the last slash, if there's none, we're done here */
-	size_t last_slash = result.rfind('/');
-	if (last_slash == std::string::npos)
-		return true;
-
-	result.erase(0, last_slash + 1);
-	return true;
-}
-
-static bool GetProcessNameFromProcName(pid_t pid, std::string& result) {
-	result.assign(2 * MAXCOMLEN, '\0');
-
-	int size = proc_name(pid, &result.front(), result.length());
-
-	/* if size is MAXCOMLEN or 2 * MAXCOMLEN, assume
-	 * this method won't work and our result is truncated */
-	if (size <= 0 || size == MAXCOMLEN || size == 2 * MAXCOMLEN)
-		return false;
-
-	result.resize(size);
-	return true;
-}
-
-bool GetProcessName(pid_t pid, std::string& result) {
-	if (GetProcessNameFromProcName(pid, result))
-		return true;
-
-	if (GetProcessNameFromProcPidPath(pid, result))
-		return true;
-
-	return false;
-}
-
-} // namespace animone::internal::xnu
+#include "animone/fd/xnu.h"
+#include "animone.h"
+#include "animone/util/osx.h"
+
+#include <cassert>
+#include <memory>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+#include <fcntl.h>
+#include <libproc.h>
+#include <sys/sysctl.h>
+#include <sys/types.h>
+#include <sys/user.h>
+
+/* you may be asking: WTF is FWRITE?
+ * well, from bsd/sys/fcntl.h in the XNU kernel:
+ *
+ *    Kernel encoding of open mode; separate read and write bits that are
+ *    independently testable: 1 greater than [O_RDONLY and O_WRONLY].
+ *
+ * It's just how the kernel defines write mode.
+*/
+#ifndef FWRITE
+#define FWRITE	0x0002
+#endif
+
+namespace animone::internal::xnu {
+
+bool EnumerateOpenProcesses(process_proc_t process_proc) {
+	size_t pids_size = 256;
+	std::unique_ptr<pid_t[]> pids;
+
+	int returned_size = 0;
+	do {
+		pids.reset(new pid_t[pids_size *= 2]);
+		returned_size = proc_listpids(PROC_ALL_PIDS, 0, pids.get(), pids_size * sizeof(pid_t));
+		if (returned_size == -1)
+			return false;
+	} while ((pids_size * sizeof(size_t)) < returned_size);
+
+	for (int i = 0; i < pids_size; i++) {
+		std::string result;
+		osx::util::GetProcessName(pids[i], result);
+		if (!process_proc({pids[i], result}))
+			return false;
+	}
+
+	return true;
+}
+
+bool EnumerateOpenFiles(const std::set<pid_t>& pids, open_file_proc_t open_file_proc) {
+	if (!open_file_proc)
+		return false;
+
+	for (const auto& pid : pids) {
+		const int bufsz = proc_pidinfo(pid, PROC_PIDLISTFDS, 0, NULL, 0);
+		if (bufsz < 0)
+			return false;
+
+		const size_t info_len = bufsz / sizeof(struct proc_fdinfo);
+		if (info_len < 1)
+			return false;
+
+		std::unique_ptr<struct proc_fdinfo[]> info(new struct proc_fdinfo[info_len]);
+		if (!info)
+			return false;
+
+		proc_pidinfo(pid, PROC_PIDLISTFDS, 0, info.get(), bufsz);
+
+		for (size_t i = 0; i < info_len; i++) {
+			if (info[i].proc_fdtype == PROX_FDTYPE_VNODE) {
+				struct vnode_fdinfowithpath vnodeInfo;
+
+				int sz = proc_pidfdinfo(pid, info[i].proc_fd, PROC_PIDFDVNODEPATHINFO, &vnodeInfo,
+				                        PROC_PIDFDVNODEPATHINFO_SIZE);
+				if (sz != PROC_PIDFDVNODEPATHINFO_SIZE)
+					return false;
+
+				/* why would a media player open a file in write mode? */
+				if (vnodeInfo.pfi.fi_openflags & FWRITE)
+					continue;
+
+				if (!open_file_proc({pid, vnodeInfo.pvip.vip_path}))
+					return false;
+			}
+		}
+	}
+
+	return true;
+}
+
+static bool GetProcessNameFromProcPidPath(pid_t pid, std::string& result) {
+	result.assign(PROC_PIDPATHINFO_MAXSIZE, '\0');
+
+	int ret = proc_pidpath(pid, result.data(), result.size() * sizeof(char));
+	if (ret <= 0)
+		return false;
+
+	/* find the last slash, if there's none, we're done here */
+	size_t last_slash = result.rfind('/');
+	if (last_slash == std::string::npos)
+		return true;
+
+	result.erase(0, last_slash + 1);
+	return true;
+}
+
+static bool GetProcessNameFromProcName(pid_t pid, std::string& result) {
+	result.assign(2 * MAXCOMLEN, '\0');
+
+	int size = proc_name(pid, &result.front(), result.length());
+
+	/* if size is MAXCOMLEN or 2 * MAXCOMLEN, assume
+	 * this method won't work and our result is truncated */
+	if (size <= 0 || size == MAXCOMLEN || size == 2 * MAXCOMLEN)
+		return false;
+
+	result.resize(size);
+	return true;
+}
+
+bool GetProcessName(pid_t pid, std::string& result) {
+	if (GetProcessNameFromProcName(pid, result))
+		return true;
+
+	if (GetProcessNameFromProcPidPath(pid, result))
+		return true;
+
+	return false;
+}
+
+} // namespace animone::internal::xnu