Mercurial > libanimone
annotate src/fd/proc.cc @ 21:973734ebd2be
dep/animone: REFACTOR ALL THE THINGS
1: animone now has its own syntax divergent from anisthesia,
making different platforms actually have their own sections
2: process names in animone are now called `comm' (this will
probably break things). this is what its called in bsd/linux
so I'm just going to use it everywhere
3: the X11 code now checks for the existence of a UTF-8 window title
and passes it if available
4: ANYTHING THATS NOT LINUX IS 100% UNTESTED AND CAN AND WILL BREAK!
I still actually need to test the bsd code. to be honest I'm probably
going to move all of the bsds into separate files because they're
all essentially different operating systems at this point
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Wed, 19 Jun 2024 12:51:15 -0400 |
parents | 6596be6917a1 |
children | 13b647714159 |
rev | line source |
---|---|
19
6596be6917a1
dep/animone: prepare for v1.0 release; it should be ready by now
Paper <paper@paper.us.eu.org>
parents:
18
diff
changeset
|
1 /* |
6596be6917a1
dep/animone: prepare for v1.0 release; it should be ready by now
Paper <paper@paper.us.eu.org>
parents:
18
diff
changeset
|
2 * fd/win32.cc: support for linux's /proc filesystem |
6596be6917a1
dep/animone: prepare for v1.0 release; it should be ready by now
Paper <paper@paper.us.eu.org>
parents:
18
diff
changeset
|
3 * |
6596be6917a1
dep/animone: prepare for v1.0 release; it should be ready by now
Paper <paper@paper.us.eu.org>
parents:
18
diff
changeset
|
4 * plan 9 caused this monstrocity... |
6596be6917a1
dep/animone: prepare for v1.0 release; it should be ready by now
Paper <paper@paper.us.eu.org>
parents:
18
diff
changeset
|
5 */ |
14
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
6 #include "animone/fd/proc.h" |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
7 #include "animone.h" |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
8 #include "animone/util.h" |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
9 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
10 #include <filesystem> |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
11 #include <fstream> |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
12 #include <sstream> |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
13 #include <string> |
18
04b412228ca7
misc: remove copyrighted app icon
Paper <paper@paper.us.eu.org>
parents:
14
diff
changeset
|
14 #include <algorithm> |
14
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
15 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
16 #include <fcntl.h> |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
17 #include <sys/stat.h> |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
18 #include <unistd.h> |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
19 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
20 static constexpr std::string_view PROC_LOCATION = "/proc"; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
21 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
22 namespace animone::internal::proc { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
23 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
24 static bool IsRegularFile(std::string link) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
25 struct stat sb; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
26 if (stat(link.c_str(), &sb) == -1) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
27 return false; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
28 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
29 return S_ISREG(sb.st_mode); |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
30 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
31 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
32 static bool AreFlagsOk(pid_t pid, int fd) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
33 const std::filesystem::path path = |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
34 std::filesystem::path(PROC_LOCATION) / std::to_string(pid) / "fdinfo" / std::to_string(fd); |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
35 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
36 std::ifstream file(path); |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
37 if (!file) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
38 return false; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
39 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
40 int flags = 0; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
41 for (std::string line; std::getline(file, line);) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
42 if (line.find("flags:", 0) == 0) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
43 flags = util::StringToInt(line.substr(line.find_last_not_of("0123456789") + 1)); |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
44 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
45 /* check if the file was opened in a write mode */ |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
46 int accflags = flags & O_ACCMODE; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
47 if (accflags == O_WRONLY || accflags == O_RDWR) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
48 return false; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
49 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
50 return true; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
51 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
52 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
53 static bool GetFilenameFromFd(std::string link, std::string& out) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
54 /* /proc is a "virtual filesystem", so we have to guess the path size. yippee! */ |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
55 constexpr size_t OUT_MAX = (1ul << 15); // 32KiB |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
56 out.resize(32); |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
57 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
58 ssize_t exe_used = 0; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
59 do { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
60 out.resize(out.length() * 2); |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
61 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
62 exe_used = readlink(link.c_str(), &out.front(), out.length()); |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
63 if (exe_used == (ssize_t)-1 || exe_used < (ssize_t)1) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
64 return false; // we got a bad result. SAD! |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
65 } while (out.length() < OUT_MAX && exe_used >= static_cast<ssize_t>(out.length())); |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
66 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
67 out.resize(out.find('\0')); |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
68 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
69 return true; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
70 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
71 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
72 static bool IsSystemFile(const std::string& path) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
73 static constexpr std::array<std::string_view, 9> invalid_paths = {"/boot", "/dev", "/bin", "/usr", "/opt", |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
74 "/proc", "/var", "/etc", "/dev"}; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
75 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
76 for (const auto& invalid_path : invalid_paths) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
77 if (!path.rfind(invalid_path, 0)) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
78 return true; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
79 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
80 return false; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
81 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
82 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
83 bool GetProcessName(pid_t pid, std::string& result) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
84 const std::filesystem::path path = std::filesystem::path(PROC_LOCATION) / std::to_string(pid) / "comm"; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
85 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
86 if (!util::ReadFile(path, result)) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
87 return false; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
88 |
18
04b412228ca7
misc: remove copyrighted app icon
Paper <paper@paper.us.eu.org>
parents:
14
diff
changeset
|
89 result.erase(std::remove(result.begin(), result.end(), '\n'), result.cend()); |
14
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
90 return true; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
91 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
92 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
93 bool EnumerateOpenProcesses(process_proc_t process_proc) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
94 bool success = false; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
95 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
96 for (const auto& dir : std::filesystem::directory_iterator{PROC_LOCATION}) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
97 Process proc; |
21
973734ebd2be
dep/animone: REFACTOR ALL THE THINGS
Paper <paper@paper.us.eu.org>
parents:
19
diff
changeset
|
98 proc.platform = ExecutablePlatform::Posix; |
14
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
99 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
100 try { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
101 proc.pid = util::StringToInt(dir.path().stem()); |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
102 success = true; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
103 } catch (std::invalid_argument const& ex) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
104 continue; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
105 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
106 |
21
973734ebd2be
dep/animone: REFACTOR ALL THE THINGS
Paper <paper@paper.us.eu.org>
parents:
19
diff
changeset
|
107 if (!GetProcessName(proc.pid, proc.comm)) |
14
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
108 continue; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
109 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
110 if (!process_proc(proc)) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
111 return false; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
112 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
113 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
114 return success; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
115 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
116 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
117 bool EnumerateOpenFiles(const std::set<pid_t>& pids, open_file_proc_t open_file_proc) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
118 if (!open_file_proc) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
119 return false; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
120 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
121 for (const auto& pid : pids) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
122 const std::filesystem::path path = std::filesystem::path(PROC_LOCATION) / std::to_string(pid) / "fd"; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
123 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
124 for (const auto& dir : std::filesystem::directory_iterator{path}) { |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
125 if (!AreFlagsOk(pid, util::StringToInt(dir.path().stem()))) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
126 continue; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
127 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
128 std::string name; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
129 if (!GetFilenameFromFd(dir.path(), name)) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
130 continue; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
131 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
132 if (!IsRegularFile(name)) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
133 continue; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
134 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
135 if (IsSystemFile(name)) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
136 continue; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
137 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
138 if (!open_file_proc({pid, name})) |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
139 return false; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
140 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
141 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
142 return true; |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
143 } |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
144 |
27b988a1048c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
6
diff
changeset
|
145 } // namespace animia::internal::proc |