[[project @ 1997-03-22 18:27:45 by ghouston] ghouston**19970322182747 Ignore-this: 369d8e1547f46a83ae81baf1c6858759 add syscalls.scm ] addfile ./syscalls.scm hunk ./ChangeLog 1 +Wed Mar 19 04:55:51 1997 Gary Houston + + * syscalls.scm: define user-info record and procedures user-info, + ->uid, ->username, %homedir. + define group-info record and procedures group-info, ->gid, ->groupname. + +Mon Mar 17 19:40:45 1997 Gary Houston + + * init.scm: load syscalls.scm. + * syscalls.scm: new file. Will not include all of the contents + of scsh's syscalls.scm. + hunk ./init.scm 41 +(load-from-path "scsh/syscalls.scm") hunk ./syscalls.scm 1 +;;; POSIX system-call Scheme binding. +;;; Copyright (c) 1993 by Olin Shivers. + +;; Only the subset from scsh that's useful in Guile, rewritten in places. +;; Incomplete. + +;;; User info +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-record user-info + name uid gid home-dir shell + + ;; Make user-info records print like #{user-info shivers}. + ((disclose ui) + (list "user-info" (user-info:name ui)))) + +;; rewritten. +(define (user-info uid/name) + (let ((info (getpw uid/name))) + (make-user-info (passwd:name info) + (passwd:uid info) + (passwd:gid info) + (passwd:dir info) + (passwd:shell info)))) + +;;; Derived functions + +(define (->uid uid/name) + (user-info:uid (user-info uid/name))) + +(define (->username uid/name) + (user-info:name (user-info uid/name))) + +(define (%homedir uid/name) + (user-info:home-dir (user-info uid/name))) + + +;;; Group info +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-record group-info + name gid members + + ;; Make group-info records print like #{group-info wheel}. + ((disclose gi) (list "group-info" (group-info:name gi)))) + +;; rewritten. +(define (group-info gid/name) + (let ((info (getgr gid/name))) + (make-group-info (group:name info) + (group:gid info) + (group:mem info)))) + +;;; Derived functions + +(define (->gid name) + (group-info:gid (group-info name))) + +(define (->groupname gid) + (group-info:name (group-info gid))) +