diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm index 4ee2b97e76..3bb4545c04 100644 --- a/guix/build/syscalls.scm +++ b/guix/build/syscalls.scm @@ -79,6 +79,7 @@ (define-module (guix build syscalls) fdatasync pivot-root scandir* + setxattr fcntl-flock lock-file @@ -723,6 +724,23 @@ (define* (device-in-use? device) (list (strerror err)) (list err)))))) +(define setxattr + (let ((proc (syscall->procedure int "setxattr" + `(* * * ,size_t ,int)))) + (lambda* (file key value #:optional (flags 0)) + "Set extended attribute KEY to VALUE on FILE." + (let*-values (((bv) (string->utf8 value)) + ((ret err) + (proc (string->pointer/utf-8 file) + (string->pointer key) + (bytevector->pointer bv) + (bytevector-length bv) + flags))) + (unless (zero? ret) + (throw 'system-error "setxattr" "~S: ~A" + (list file key value (strerror err)) + (list err))))))) + ;;; ;;; Random.