From 324a2630f26c236c2ce438961d5dec727a4432ac Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Mon, 13 Sep 2021 16:29:43 -0700 Subject: add wrappers of some system functions to manipulate POSIX.1e ACLs Signed-off-by: Sean Whitton --- src/util.lisp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/util.lisp') diff --git a/src/util.lisp b/src/util.lisp index 487fcd4..0396fde 100644 --- a/src/util.lisp +++ b/src/util.lisp @@ -605,11 +605,19 @@ Does not currently establish a PAM session." (defmacro define-error-retval-cfun ((&key (errno t) (failure-val -1)) &body defcfun-args) (let ((defun (etypecase (car defcfun-args) - (string (intern (string-upcase (car defcfun-args)))) + (string + (translate-name-from-foreign (car defcfun-args) '*package*)) (list (cadar defcfun-args)))) (cfun (etypecase (car defcfun-args) (string (car defcfun-args)) - (list (caar defcfun-args))))) + (list (caar defcfun-args)))) + (failure-val-check + (once-only (failure-val) + `(cond ((numberp ,failure-val) (= ,failure-val result)) + ((pointerp ,failure-val) (pointer-eq ,failure-val result)) + (t (simple-program-error + "Don't know how to compare function return value with ~S." + ,failure-val)))))) `(defun ,defun ,(loop for arg in (cddr defcfun-args) collect (car arg)) ,@(and (eql errno :zero) '((nix:set-errno 0))) (let ((result (foreign-funcall @@ -618,8 +626,8 @@ Does not currently establish a PAM session." collect (cadr arg) collect (car arg)) ,(cadr defcfun-args)))) (if ,(if (eql errno :zero) - `(and (= ,failure-val result) (not (zerop (nix:get-errno)))) - `(= ,failure-val result)) + `(and ,failure-val-check (not (zerop (nix:get-errno)))) + failure-val-check) (nix:posix-error ,(and errno '(nix:get-errno)) nil ',defun) result))))) -- cgit v1.2.3