1package internal
2
3import (
4 "fmt"
5 "os"
6 "strings"
7 "time"
8
9 "golang.org/x/sys/unix"
10)
11
12func Debug(name string, mask, cookie uint32) {
13 names := []struct {
14 n string
15 m uint32
16 }{
17 {"IN_ACCESS", unix.IN_ACCESS},
18 {"IN_ATTRIB", unix.IN_ATTRIB},
19 {"IN_CLOSE", unix.IN_CLOSE},
20 {"IN_CLOSE_NOWRITE", unix.IN_CLOSE_NOWRITE},
21 {"IN_CLOSE_WRITE", unix.IN_CLOSE_WRITE},
22 {"IN_CREATE", unix.IN_CREATE},
23 {"IN_DELETE", unix.IN_DELETE},
24 {"IN_DELETE_SELF", unix.IN_DELETE_SELF},
25 {"IN_IGNORED", unix.IN_IGNORED},
26 {"IN_ISDIR", unix.IN_ISDIR},
27 {"IN_MODIFY", unix.IN_MODIFY},
28 {"IN_MOVE", unix.IN_MOVE},
29 {"IN_MOVED_FROM", unix.IN_MOVED_FROM},
30 {"IN_MOVED_TO", unix.IN_MOVED_TO},
31 {"IN_MOVE_SELF", unix.IN_MOVE_SELF},
32 {"IN_OPEN", unix.IN_OPEN},
33 {"IN_Q_OVERFLOW", unix.IN_Q_OVERFLOW},
34 {"IN_UNMOUNT", unix.IN_UNMOUNT},
35 }
36
37 var (
38 l []string
39 unknown = mask
40 )
41 for _, n := range names {
42 if mask&n.m == n.m {
43 l = append(l, n.n)
44 unknown ^= n.m
45 }
46 }
47 if unknown > 0 {
48 l = append(l, fmt.Sprintf("0x%x", unknown))
49 }
50 var c string
51 if cookie > 0 {
52 c = fmt.Sprintf("(cookie: %d) ", cookie)
53 }
54 fmt.Fprintf(os.Stderr, "FSNOTIFY_DEBUG: %s %-30s → %s%q\n",
55 time.Now().Format("15:04:05.000000000"), strings.Join(l, "|"), c, name)
56}