...
1
2
3 package reader
4
5 import (
6 "bufio"
7 "io"
8
9 "golang.org/x/sys/unix"
10
11 uevent "edge-infra.dev/pkg/lib/kernel/udev"
12 )
13
14 type Decoder interface {
15 Decode(buf []byte) (*uevent.UEvent, error)
16 Read(*[]byte) error
17 }
18
19 type socket struct {
20 fd int
21 }
22
23 type reader struct {
24 reader *bufio.Reader
25 }
26
27
28
29 func NewSocketReader(fd int) Decoder {
30 return &socket{fd: fd}
31 }
32
33
34
35 func NewReader(r io.Reader) Decoder {
36 return &reader{reader: bufio.NewReader(r)}
37 }
38
39
40
41 func (s *socket) Read(buf *[]byte) error {
42 if buf == nil {
43 return io.ErrShortBuffer
44 }
45 n, _, err := unix.Recvfrom(s.fd, *buf, 0)
46 if err != nil {
47 return err
48 }
49 if n == 0 {
50 return io.EOF
51 }
52
53 *buf = (*buf)[:n]
54 return nil
55 }
56
57
58 func (s *socket) Decode(buf []byte) (ue *uevent.UEvent, err error) {
59 return uevent.Decode(buf)
60 }
61
62
63
64 func (r *reader) Read(buf *[]byte) error {
65 n, err := r.reader.Read(*buf)
66 if n == 0 {
67 return io.EOF
68 }
69 *buf = (*buf)[:n]
70 return err
71 }
72
73
74 func (r *reader) Decode(buf []byte) (ue *uevent.UEvent, err error) {
75 return uevent.Decode(buf)
76 }
77
View as plain text