]> gitweb.factorcode.org Git - factor.git/blob - basis/system-info/freebsd/freebsd.factor
system-info: implement system-info.freebsd via sysctl
[factor.git] / basis / system-info / freebsd / freebsd.factor
1 ! Copyright (C) 2022 Alex Maestas
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.c-types alien.syntax byte-arrays grouping kernel
4 libc math sequences splitting strings system system-info
5 unix.sysctl unix.users ;
6 IN: system-info.freebsd
7
8 ! From /usr/include/sys/utsname.h and as of FreeBSD-13, struct utsname
9 ! is a block of 5 names; __xuname accepts a base length for each item,
10 ! so we can allocate a precise buffer.
11
12 CONSTANT: SYS_NMLN 256
13 CONSTANT: utsname-items 5
14
15 <PRIVATE
16
17 FUNCTION-ALIAS: (xuname)
18     int __xuname ( uint nmln, char *buf )
19
20 : (uname) ( nmln -- utsname-seq )
21     dup utsname-items * <byte-array>
22     [ (xuname) io-error ] keep ;
23
24 PRIVATE>
25
26 : uname ( -- seq )
27      SYS_NMLN [ (uname) ] [ group ] bi
28      dup length utsname-items assert=
29      [ >string [ zero? ] trim-tail ] map ;
30
31 : sysname ( -- string ) 0 uname nth ;
32 : nodename ( -- string ) 1 uname nth ;
33 : release ( -- string ) 2 uname nth ;
34 : version ( -- string ) 3 uname nth ;
35 : machine ( -- string ) 4 uname nth ;
36
37 M: freebsd os-version release ;
38 M: freebsd cpus { 6 3 } sysctl-query-uint ;
39 M: freebsd physical-mem { 6 5 } sysctl-query-ulonglong ;
40 M: freebsd computer-name nodename ;
41 M: freebsd username real-user-name ;
42
43 M: freebsd cpu-mhz
44     "dev.cpu.0.freq" sysctl-name-query-uint
45     1000 1000 * * ;