Mercurial > minori
comparison dep/animone/src/fd/proc.cc @ 270:0718f538c5f9
dep/animone: filter open files by access mode
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Fri, 12 Apr 2024 19:13:50 -0400 |
parents | 862d0d8619f6 |
children | b1f625b0227c |
comparison
equal
deleted
inserted
replaced
269:3efac0541151 | 270:0718f538c5f9 |
---|---|
34 int flags = 0; | 34 int flags = 0; |
35 for (std::string line; std::getline(file, line);) | 35 for (std::string line; std::getline(file, line);) |
36 if (line.find("flags:", 0) == 0) | 36 if (line.find("flags:", 0) == 0) |
37 flags = util::StringToInt(line.substr(line.find_last_not_of("0123456789") + 1)); | 37 flags = util::StringToInt(line.substr(line.find_last_not_of("0123456789") + 1)); |
38 | 38 |
39 if (flags & O_WRONLY || flags & O_RDWR) | 39 /* check if the file was opened in a write mode */ |
40 int accflags = flags & O_ACCMODE; | |
41 if (accflags == O_WRONLY || accflags == O_RDWR) | |
40 return false; | 42 return false; |
41 | 43 |
42 return true; | 44 return true; |
43 } | 45 } |
44 | 46 |
63 | 65 |
64 static bool IsSystemFile(const std::string& path) { | 66 static bool IsSystemFile(const std::string& path) { |
65 static constexpr std::array<std::string_view, 9> invalid_paths = {"/boot", "/dev", "/bin", "/usr", "/opt", | 67 static constexpr std::array<std::string_view, 9> invalid_paths = {"/boot", "/dev", "/bin", "/usr", "/opt", |
66 "/proc", "/var", "/etc", "/dev"}; | 68 "/proc", "/var", "/etc", "/dev"}; |
67 | 69 |
68 for (const auto& invalid_path : invalid_paths) { | 70 for (const auto& invalid_path : invalid_paths) |
69 if (!path.rfind(invalid_path, 0)) { | 71 if (!path.rfind(invalid_path, 0)) |
70 return true; | 72 return true; |
71 } | |
72 } | |
73 | 73 |
74 return false; | 74 return false; |
75 } | 75 } |
76 | 76 |
77 bool GetProcessName(pid_t pid, std::string& result) { | 77 bool GetProcessName(pid_t pid, std::string& result) { |