Mercurial > yakumo_izuru > aya
comparison vendor/golang.org/x/sys/unix/xattr_bsd.go @ 68:4b79810863f6 draft
Ready to release 0.6.0
Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author | yakumo.izuru |
---|---|
date | Wed, 13 Sep 2023 10:49:50 +0000 |
parents | 787b5ee0289d |
children |
comparison
equal
deleted
inserted
replaced
67:4edfa07d5fe0 | 68:4b79810863f6 |
---|---|
158 err = ExtattrDeleteLink(link, nsid, a) | 158 err = ExtattrDeleteLink(link, nsid, a) |
159 return | 159 return |
160 } | 160 } |
161 | 161 |
162 func Listxattr(file string, dest []byte) (sz int, err error) { | 162 func Listxattr(file string, dest []byte) (sz int, err error) { |
163 d := initxattrdest(dest, 0) | |
164 destsiz := len(dest) | 163 destsiz := len(dest) |
165 | 164 |
166 // FreeBSD won't allow you to list xattrs from multiple namespaces | 165 // FreeBSD won't allow you to list xattrs from multiple namespaces |
167 s := 0 | 166 s, pos := 0, 0 |
168 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { | 167 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { |
169 stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) | 168 stmp, e := ListxattrNS(file, nsid, dest[pos:]) |
170 | 169 |
171 /* Errors accessing system attrs are ignored so that | 170 /* Errors accessing system attrs are ignored so that |
172 * we can implement the Linux-like behavior of omitting errors that | 171 * we can implement the Linux-like behavior of omitting errors that |
173 * we don't have read permissions on | 172 * we don't have read permissions on |
174 * | 173 * |
175 * Linux will still error if we ask for user attributes on a file that | 174 * Linux will still error if we ask for user attributes on a file that |
176 * we don't have read permissions on, so don't ignore those errors | 175 * we don't have read permissions on, so don't ignore those errors |
177 */ | 176 */ |
178 if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { | 177 if e != nil { |
179 continue | 178 if e == EPERM && nsid != EXTATTR_NAMESPACE_USER { |
180 } else if e != nil { | 179 continue |
180 } | |
181 return s, e | 181 return s, e |
182 } | 182 } |
183 | 183 |
184 s += stmp | 184 s += stmp |
185 destsiz -= s | 185 pos = s |
186 if destsiz < 0 { | 186 if pos > destsiz { |
187 destsiz = 0 | 187 pos = destsiz |
188 } | 188 } |
189 d = initxattrdest(dest, s) | 189 } |
190 | |
191 return s, nil | |
192 } | |
193 | |
194 func ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) { | |
195 d := initxattrdest(dest, 0) | |
196 destsiz := len(dest) | |
197 | |
198 s, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) | |
199 if e != nil { | |
200 return 0, err | |
190 } | 201 } |
191 | 202 |
192 return s, nil | 203 return s, nil |
193 } | 204 } |
194 | 205 |
195 func Flistxattr(fd int, dest []byte) (sz int, err error) { | 206 func Flistxattr(fd int, dest []byte) (sz int, err error) { |
196 d := initxattrdest(dest, 0) | 207 destsiz := len(dest) |
197 destsiz := len(dest) | 208 |
198 | 209 s, pos := 0, 0 |
199 s := 0 | |
200 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { | 210 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { |
201 stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) | 211 stmp, e := FlistxattrNS(fd, nsid, dest[pos:]) |
202 if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { | 212 |
203 continue | 213 if e != nil { |
204 } else if e != nil { | 214 if e == EPERM && nsid != EXTATTR_NAMESPACE_USER { |
215 continue | |
216 } | |
205 return s, e | 217 return s, e |
206 } | 218 } |
207 | 219 |
208 s += stmp | 220 s += stmp |
209 destsiz -= s | 221 pos = s |
210 if destsiz < 0 { | 222 if pos > destsiz { |
211 destsiz = 0 | 223 pos = destsiz |
212 } | 224 } |
213 d = initxattrdest(dest, s) | 225 } |
226 | |
227 return s, nil | |
228 } | |
229 | |
230 func FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) { | |
231 d := initxattrdest(dest, 0) | |
232 destsiz := len(dest) | |
233 | |
234 s, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) | |
235 if e != nil { | |
236 return 0, err | |
214 } | 237 } |
215 | 238 |
216 return s, nil | 239 return s, nil |
217 } | 240 } |
218 | 241 |
219 func Llistxattr(link string, dest []byte) (sz int, err error) { | 242 func Llistxattr(link string, dest []byte) (sz int, err error) { |
220 d := initxattrdest(dest, 0) | 243 destsiz := len(dest) |
221 destsiz := len(dest) | 244 |
222 | 245 s, pos := 0, 0 |
223 s := 0 | |
224 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { | 246 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { |
225 stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) | 247 stmp, e := LlistxattrNS(link, nsid, dest[pos:]) |
226 if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { | 248 |
227 continue | 249 if e != nil { |
228 } else if e != nil { | 250 if e == EPERM && nsid != EXTATTR_NAMESPACE_USER { |
251 continue | |
252 } | |
229 return s, e | 253 return s, e |
230 } | 254 } |
231 | 255 |
232 s += stmp | 256 s += stmp |
233 destsiz -= s | 257 pos = s |
234 if destsiz < 0 { | 258 if pos > destsiz { |
235 destsiz = 0 | 259 pos = destsiz |
236 } | 260 } |
237 d = initxattrdest(dest, s) | 261 } |
238 } | 262 |
239 | 263 return s, nil |
240 return s, nil | 264 } |
241 } | 265 |
266 func LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) { | |
267 d := initxattrdest(dest, 0) | |
268 destsiz := len(dest) | |
269 | |
270 s, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) | |
271 if e != nil { | |
272 return 0, err | |
273 } | |
274 | |
275 return s, nil | |
276 } |