@@ -18,11 +18,9 @@ import (
1818func GetMountsFromReader (r io.Reader , filter FilterFunc ) ([]* Info , error ) {
1919 s := bufio .NewScanner (r )
2020 out := []* Info {}
21- var err error
2221 for s .Scan () {
23- if err = s .Err (); err != nil {
24- return nil , err
25- }
22+ var err error
23+
2624 /*
2725 See http://man7.org/linux/man-pages/man5/proc.5.html
2826
@@ -74,7 +72,6 @@ func GetMountsFromReader(r io.Reader, filter FilterFunc) ([]*Info, error) {
7472
7573 p := & Info {}
7674
77- // Fill in the fields that a filter might check
7875 p .Mountpoint , err = unescape (fields [4 ])
7976 if err != nil {
8077 return nil , fmt .Errorf ("Parsing '%s' failed: mount point: %w" , fields [4 ], err )
@@ -89,18 +86,6 @@ func GetMountsFromReader(r io.Reader, filter FilterFunc) ([]*Info, error) {
8986 }
9087 p .VFSOptions = fields [sepIdx + 3 ]
9188
92- // Run a filter early so we can skip parsing/adding entries
93- // the caller is not interested in
94- var skip , stop bool
95- if filter != nil {
96- skip , stop = filter (p )
97- if skip {
98- continue
99- }
100- }
101-
102- // Fill in the rest of the fields
103-
10489 // ignore any numbers parsing errors, as there should not be any
10590 p .ID , _ = strconv .Atoi (fields [0 ])
10691 p .Parent , _ = strconv .Atoi (fields [1 ])
@@ -128,11 +113,23 @@ func GetMountsFromReader(r io.Reader, filter FilterFunc) ([]*Info, error) {
128113 p .Optional = strings .Join (fields [6 :sepIdx - 1 ], " " )
129114 }
130115
116+ // Run the filter after parsing all of the fields.
117+ var skip , stop bool
118+ if filter != nil {
119+ skip , stop = filter (p )
120+ if skip {
121+ continue
122+ }
123+ }
124+
131125 out = append (out , p )
132126 if stop {
133127 break
134128 }
135129 }
130+ if err := s .Err (); err != nil {
131+ return nil , err
132+ }
136133 return out , nil
137134}
138135
0 commit comments