debug_linux.go

 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}