changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/std/os.lisp

changeset 698: 96958d3eb5b0
parent: ebe3315b7add
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
222
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 ;;; std/os.lisp --- OS interop definitions
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 222
diff changeset
3
 ;; UNIX only.
222
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
4
 
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
5
 ;;; Code:
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents: 282
diff changeset
6
 (in-package :std/os)
222
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
7
 (require 'sb-posix)
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
8
 
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
9
 (defun list-all-users ()
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
10
   "List all users via passwd. (uid gid name home shell comment)"
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
11
   (let ((r nil))
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
12
     (sb-posix:do-passwds (u r) 
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
13
       (push (list (sb-posix:passwd-uid u)
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
14
                   (sb-posix:passwd-gid u)
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
15
                   (sb-posix:passwd-name u)
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
16
                   (sb-posix:passwd-dir u)
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
17
                   (sb-posix:passwd-shell u)
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
18
                   (sb-posix:passwd-gecos u))
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
19
             r))
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
20
     r))
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
21
 
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
22
 (defun list-all-groups ()
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
23
   "List all groups. (gid name mem)"
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
24
   (let ((r nil))
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
25
   (sb-posix:do-groups (g r) (push (list (sb-posix:group-gid g)
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
26
                                         (sb-posix:group-name g)
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
27
                                         (sb-posix:group-mem g))
83e823b80219 add os module
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
28
                                   r))))
589
16a3cdc06cbc add cli/tools/wg
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
29
 
16a3cdc06cbc add cli/tools/wg
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
30
 (defmacro with-umask (mask &body body)
16a3cdc06cbc add cli/tools/wg
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
31
   "Temporarily set the system-wide umask for the extent of BODY."
16a3cdc06cbc add cli/tools/wg
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
32
   (with-gensyms (umask)
16a3cdc06cbc add cli/tools/wg
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
33
     `(let ((,umask (sb-posix:umask ,mask)))
16a3cdc06cbc add cli/tools/wg
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
34
        (unwind-protect (progn ,@body)
16a3cdc06cbc add cli/tools/wg
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
35
          (sb-posix:umask ,umask)))))
16a3cdc06cbc add cli/tools/wg
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
36
 
16a3cdc06cbc add cli/tools/wg
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
37
 ;; (with-umask #o22 nil)
685
ebe3315b7add evdev/kbd fully operational, rustls and blake3 cleanups
Richard Westhaver <ellis@rwest.io>
parents: 589
diff changeset
38
 
ebe3315b7add evdev/kbd fully operational, rustls and blake3 cleanups
Richard Westhaver <ellis@rwest.io>
parents: 589
diff changeset
39
 (defmacro with-fd ((fvar fname &key (flags #.sb-posix:o-rdonly) (close t)) &body body)
ebe3315b7add evdev/kbd fully operational, rustls and blake3 cleanups
Richard Westhaver <ellis@rwest.io>
parents: 589
diff changeset
40
   `(let* ((,fvar (sb-posix:open ,fname ,flags)))
ebe3315b7add evdev/kbd fully operational, rustls and blake3 cleanups
Richard Westhaver <ellis@rwest.io>
parents: 589
diff changeset
41
      (unwind-protect (progn ,@body)
ebe3315b7add evdev/kbd fully operational, rustls and blake3 cleanups
Richard Westhaver <ellis@rwest.io>
parents: 589
diff changeset
42
        ,@(when close `(sb-posix:close ,fvar)))))