hswg: improve inotify processing
Make sure to read the whole record before checking flags.
This commit is contained in:
parent
6228693b22
commit
ef24d7980c
16
hswg/main.go
16
hswg/main.go
@ -334,6 +334,15 @@ func dispatchEvents(dirname string, r io.Reader, ch chan<- *watchEvent) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
base := make([]byte, e.Len)
|
||||||
|
if e.Len != 0 {
|
||||||
|
if n, err := r.Read(base); err != nil {
|
||||||
|
return err
|
||||||
|
} else if n < int(e.Len) {
|
||||||
|
return fmt.Errorf("short read")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case e.Mask&syscall.IN_IGNORED != 0:
|
case e.Mask&syscall.IN_IGNORED != 0:
|
||||||
return fmt.Errorf("watch removed by kernel")
|
return fmt.Errorf("watch removed by kernel")
|
||||||
@ -345,13 +354,6 @@ func dispatchEvents(dirname string, r io.Reader, ch chan<- *watchEvent) error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
base := make([]byte, e.Len)
|
|
||||||
if n, err := r.Read(base); err != nil {
|
|
||||||
return err
|
|
||||||
} else if n < int(e.Len) {
|
|
||||||
return fmt.Errorf("short read")
|
|
||||||
}
|
|
||||||
|
|
||||||
basename, interesting := string(base[:bytes.IndexByte(base, 0)]), false
|
basename, interesting := string(base[:bytes.IndexByte(base, 0)]), false
|
||||||
for _, glob := range globs {
|
for _, glob := range globs {
|
||||||
if matches, _ := filepath.Match(glob, basename); matches {
|
if matches, _ := filepath.Match(glob, basename); matches {
|
||||||
|
Loading…
Reference in New Issue
Block a user