;;; system-information - UNIX version #> #include static C_TLS struct utsname C_utsname; static C_TLS char C_hostbuf[ 256 ]; #define C_uname C_fix(uname(&C_utsname)) <# (define get-host-name (let ((getit (foreign-lambda* c-string () "if(gethostname(C_hostbuf, 256) == -1) C_return(NULL);" "else C_return(C_hostbuf);"))) (lambda () (let ((host (getit))) (unless host (##sys#posix-error #:error 'get-host-name "cannot retrieve host-name")) host)))) (define-foreign-variable _uname int "C_uname") (define-foreign-variable _uname-sysname nonnull-c-string "C_utsname.sysname") (define-foreign-variable _uname-nodename nonnull-c-string "C_utsname.nodename") (define-foreign-variable _uname-release nonnull-c-string "C_utsname.release") (define-foreign-variable _uname-version nonnull-c-string "C_utsname.version") (define-foreign-variable _uname-machine nonnull-c-string "C_utsname.machine") (define system-information (lambda () (when (fx< _uname 0) (##sys#update-errno) (##sys#error 'system-information "cannot retrieve system information")) (list _uname-sysname _uname-nodename _uname-release _uname-version _uname-machine)))