! Copyright (C) 2010 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
-USING: alien.c-types alien.syntax classes.struct unix.types ;
+USING: alien.c-types alien.syntax classes.struct unix.time
+unix.types ;
IN: unix.ffi
CONSTANT: MAXPATHLEN 1024
STRUCT: utmpx
{ ut_type short }
{ ut_pid pid_t }
- { ut_line short }
- { ut_id short }
- { ut_user short }
- { ut_host short }
+ { ut_line char[__UT_LINESIZE] }
+ { ut_id char[4] }
+ { ut_user char[__UT_NAMESIZE] }
+ { ut_host char[__UT_HOSTSIZE] }
{ ut_exit exit_status }
{ ut_session long }
{ ut_tv timeval }
--- /dev/null
+Doug Coleman
--- /dev/null
+! Copyright (C) 2013 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors calendar.unix combinators kernel system
+unix.ffi unix.utmpx ;
+IN: unix.utmpx.linux
+
+M: linux utmpx>utmpx-record ( utmpx -- utmpx-record )
+ [ new-utmpx-record ] dip {
+ [ ut_user>> __UT_NAMESIZE memory>string >>user ]
+ [ ut_id>> 4 memory>string >>id ]
+ [ ut_line>> __UT_LINESIZE memory>string >>line ]
+ [ ut_pid>> >>pid ]
+ [ ut_type>> >>type ]
+ [ ut_tv>> timeval>unix-time >>timestamp ]
+ [ ut_host>> __UT_HOSTSIZE memory>string >>host ]
+ } cleave ;
+
--- /dev/null
+Doug Coleman
--- /dev/null
+! Copyright (C) 2013 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors calendar.unix combinators kernel system
+unix.ffi unix.utmpx ;
+IN: unix.utmpx.macosx
+
+M: macosx utmpx>utmpx-record ( utmpx -- utmpx-record )
+ [ new-utmpx-record ] dip {
+ [ ut_user>> _UTX_USERSIZE memory>string >>user ]
+ [ ut_id>> _UTX_IDSIZE memory>string >>id ]
+ [ ut_line>> _UTX_LINESIZE memory>string >>line ]
+ [ ut_pid>> >>pid ]
+ [ ut_type>> >>type ]
+ [ ut_tv>> timeval>unix-time >>timestamp ]
+ [ ut_host>> _UTX_HOSTSIZE memory>string >>host ]
+ } cleave ;
M: unix new-utmpx-record
utmpx-record new ;
-
-M: unix utmpx>utmpx-record ( utmpx -- utmpx-record )
- [ new-utmpx-record ] dip {
- [ ut_user>> _UTX_USERSIZE memory>string >>user ]
- [ ut_id>> _UTX_IDSIZE memory>string >>id ]
- [ ut_line>> _UTX_LINESIZE memory>string >>line ]
- [ ut_pid>> >>pid ]
- [ ut_type>> >>type ]
- [ ut_tv>> timeval>unix-time >>timestamp ]
- [ ut_host>> _UTX_HOSTSIZE memory>string >>host ]
- } cleave ;
: with-utmpx ( quot -- )
setutxent [ endutxent ] [ ] cleanup ; inline
[ utmpx>utmpx-record ]
produce nip
] with-utmpx ;
+
+os {
+ { macosx [ "unix.utmpx.macosx" require ] }
+ { linux [ "unix.utmpx.linux" require ] }
+} case