Mercurial > minori
comparison dep/animia/src/bsd.cpp @ 78:1ce00c1c8ddc
dep/animia: update to upstream
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Wed, 11 Oct 2023 12:16:15 -0400 |
parents | 4c6dd5999b39 |
children | eab9e623eb84 |
comparison
equal
deleted
inserted
replaced
77:6f7385bd334c | 78:1ce00c1c8ddc |
---|---|
76 | 76 |
77 std::vector<std::string> get_open_files(int pid) { | 77 std::vector<std::string> get_open_files(int pid) { |
78 /* note: this is OS X only right now. eventually, I'll find a way | 78 /* note: this is OS X only right now. eventually, I'll find a way |
79 to do this in FreeBSD, OpenBSD and the like */ | 79 to do this in FreeBSD, OpenBSD and the like */ |
80 std::vector<std::string> ret; | 80 std::vector<std::string> ret; |
81 | |
82 if (pid == 0) | |
83 return ret; | |
84 | |
81 int bufsz = proc_pidinfo(pid, PROC_PIDLISTFDS, 0, NULL, 0); | 85 int bufsz = proc_pidinfo(pid, PROC_PIDLISTFDS, 0, NULL, 0); |
86 if (bufsz == -1) | |
87 return ret; | |
88 | |
82 struct proc_fdinfo* info = (struct proc_fdinfo*)malloc(bufsz); | 89 struct proc_fdinfo* info = (struct proc_fdinfo*)malloc(bufsz); |
90 if (!info) | |
91 return ret; | |
92 | |
83 proc_pidinfo(pid, PROC_PIDLISTFDS, 0, info, bufsz); | 93 proc_pidinfo(pid, PROC_PIDLISTFDS, 0, info, bufsz); |
84 | 94 |
85 // iterate over stuff | 95 // iterate over stuff |
86 ret.reserve(bufsz / sizeof(info[0])); | 96 ret.reserve(bufsz / sizeof(info[0])); |
87 for (int i = 0; i < bufsz / sizeof(info[0]); i++) { | 97 for (int i = 0; i < bufsz / sizeof(info[0]); i++) { |
88 if (info[i].proc_fdtype == PROX_FDTYPE_VNODE) { | 98 if (info[i].proc_fdtype == PROX_FDTYPE_VNODE) { |
89 struct vnode_fdinfowithpath vnodeInfo; | 99 struct vnode_fdinfowithpath vnodeInfo; |
90 proc_pidfdinfo(pid, info[i].proc_fd, PROC_PIDFDVNODEPATHINFO, &vnodeInfo, PROC_PIDFDVNODEPATHINFO_SIZE); | 100 |
101 int sz = proc_pidfdinfo(pid, info[i].proc_fd, PROC_PIDFDVNODEPATHINFO, &vnodeInfo, PROC_PIDFDVNODEPATHINFO_SIZE); | |
102 if (sz != PROC_PIDFDVNODEPATHINFO_SIZE) | |
103 continue; | |
104 | |
105 if (vnodeInfo.pfi.fi_openflags & O_WRONLY || vnodeInfo.pfi.fi_openflags & O_RDWR) | |
106 continue; | |
107 | |
91 ret.push_back(vnodeInfo.pvip.vip_path); | 108 ret.push_back(vnodeInfo.pvip.vip_path); |
92 } | 109 } |
93 } | 110 } |
94 return ret; | 111 return ret; |
95 } | 112 } |