refactor: improve event framing in linux watcher
This commit is contained in:
parent
9d758d9823
commit
327df84e77
1 changed files with 10 additions and 7 deletions
|
|
@ -285,17 +285,20 @@ pub fn start(watcher: *LinuxWatcher) !void {
|
|||
t.detach();
|
||||
}
|
||||
|
||||
pub fn listen(watcher: *LinuxWatcher) !void {
|
||||
fn listen(watcher: *LinuxWatcher) !void {
|
||||
const gpa = watcher.gpa;
|
||||
const Event = std.os.linux.inotify_event;
|
||||
const event_size = @sizeOf(Event);
|
||||
while (true) {
|
||||
var buffer: [event_size * 10]u8 = undefined;
|
||||
const len = try std.posix.read(watcher.notify_fd, &buffer);
|
||||
if (len < 0) @panic("notify fd read error");
|
||||
var buffer: [event_size * 10]u8 = undefined;
|
||||
var event_data: []u8 = buffer[0..0];
|
||||
while (true) : ({
|
||||
std.mem.copyForwards(u8, buffer[0..], event_data);
|
||||
event_data = buffer[0..event_data.len];
|
||||
}) {
|
||||
const len = try std.posix.read(watcher.notify_fd, buffer[event_data.len..]);
|
||||
event_data = buffer[0 .. event_data.len + len];
|
||||
|
||||
var event_data = buffer[0..len];
|
||||
while (event_data.len > 0) {
|
||||
while (event_data.len > event_size) {
|
||||
const event: *Event = @ptrCast(@alignCast(event_data[0..event_size]));
|
||||
const parent = watcher.watch_fds.get(event.wd).?;
|
||||
event_data = event_data[event_size + event.len ..];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue