list-xattrs: Don’t throw exception on empty x-attr
This commit is contained in:
parent
adaa561e59
commit
9e1947b0f7
19
xattr.scm
19
xattr.scm
|
@ -19,8 +19,8 @@
|
|||
(get-xattr set-xattr remove-xattr list-xattrs)
|
||||
|
||||
(import scheme
|
||||
(chicken base) (chicken foreign) (chicken memory)
|
||||
srfi-1 srfi-12)
|
||||
(chicken base) (chicken condition) (chicken foreign) (chicken memory)
|
||||
srfi-1)
|
||||
|
||||
|
||||
(foreign-declare "#include \"xattr_ext.c\"")
|
||||
|
@ -95,8 +95,6 @@
|
|||
|
||||
;; TODO: These exception functions should be constructed with a macro and a simple
|
||||
;; list, like `((c-constant symbol error-message) ("E2BIG" 'e2big "The attribute value was too big."))
|
||||
;; Unfortunately, it looks like chicken's macros work a good bit differently from CLs?
|
||||
;; orr I'm losing my mind
|
||||
|
||||
|
||||
;; Return the exception associated with an error-code as per getxattr(2), if it exists
|
||||
|
@ -165,10 +163,15 @@
|
|||
(define (pointer->delimited-string-list pointer length delimiter)
|
||||
(let* ([is-zero (lambda (num) (eq? num 0))]
|
||||
[map-to-char (lambda (a) (map integer->char a))]
|
||||
[byte-list (drop-right (pointer->integers pointer length) 1)])
|
||||
(map list->string
|
||||
(map map-to-char
|
||||
(split-list is-zero byte-list)))))
|
||||
[pointer-ints (pointer->integers pointer length)]
|
||||
[byte-list (when (list? pointer-ints)
|
||||
(drop-right pointer-ints 1))])
|
||||
(if (and (list? byte-list)
|
||||
(not (null-list? byte-list)))
|
||||
(map list->string
|
||||
(map map-to-char
|
||||
(split-list is-zero byte-list)))
|
||||
'())))
|
||||
|
||||
|
||||
;; Takes a pointer and returns a list of bytes of a given length
|
||||
|
|
Ŝarĝante…
Reference in New Issue