Source code
Revision control
Copy as Markdown
Other Tools
//! Header: `utmpx.h`
//!
use crate::prelude::*;
// pub const _PATH_UTMPX: &[c_char; 14] = b"/var/run/utmpx";
// pub const _PATH_WTMPX: &[c_char; 14] = b"/var/log/wtmpx";
// pub const _PATH_LASTLOGX: &[c_char; 17] = b"/var/log/lastlogx";
// pub const _PATH_UTMP_UPDATE: &[c_char; 24] = b"/usr/libexec/utmp_update";
pub const _UTX_USERSIZE: usize = 32;
pub const _UTX_LINESIZE: usize = 32;
pub const _UTX_IDSIZE: usize = 4;
pub const _UTX_HOSTSIZE: usize = 256;
pub const EMPTY: u16 = 0;
pub const RUN_LVL: u16 = 1;
pub const BOOT_TIME: u16 = 2;
pub const OLD_TIME: u16 = 3;
pub const NEW_TIME: u16 = 4;
pub const INIT_PROCESS: u16 = 5;
pub const LOGIN_PROCESS: u16 = 6;
pub const USER_PROCESS: u16 = 7;
pub const DEAD_PROCESS: u16 = 8;
pub const ACCOUNTING: u16 = 9;
pub const SIGNATURE: u16 = 10;
pub const DOWN_TIME: u16 = 11;
// Expression based on the comment in NetBSD source.
pub const _UTX_PADSIZE: usize = if cfg!(target_pointer_width = "64") {
36
} else {
40
};
s! {
pub struct utmpx {
pub ut_name: [c_char; _UTX_USERSIZE],
pub ut_id: [c_char; _UTX_IDSIZE],
pub ut_line: [c_char; _UTX_LINESIZE],
pub ut_host: [c_char; _UTX_HOSTSIZE],
pub ut_session: u16,
pub ut_type: u16,
pub ut_pid: crate::pid_t,
pub ut_exit: __exit_status, // FIXME(netbsd): when anonymous struct are supported
pub ut_ss: crate::sockaddr_storage,
pub ut_tv: crate::timeval,
ut_pad: Padding<[u8; _UTX_PADSIZE]>,
}
pub struct __exit_status {
pub e_termination: u16,
pub e_exit: u16,
}
pub struct lastlogx {
pub ll_tv: crate::timeval,
pub ll_line: [c_char; _UTX_LINESIZE],
pub ll_host: [c_char; _UTX_HOSTSIZE],
pub ll_ss: crate::sockaddr_storage,
}
}
#[link(name = "util")]
extern "C" {
pub fn setutxent();
pub fn endutxent();
#[link_name = "__getutxent50"]
pub fn getutxent() -> *mut utmpx;
#[link_name = "__getutxid50"]
pub fn getutxid(ut: *const utmpx) -> *mut utmpx;
#[link_name = "__getutxline50"]
pub fn getutxline(ut: *const utmpx) -> *mut utmpx;
#[link_name = "__pututxline50"]
pub fn pututxline(ut: *const utmpx) -> *mut utmpx;
#[link_name = "__updwtmpx50"]
pub fn updwtmpx(file: *const c_char, ut: *const utmpx) -> c_int;
#[link_name = "__getlastlogx50"]
pub fn getlastlogx(fname: *const c_char, uid: crate::uid_t, ll: *mut lastlogx)
-> *mut lastlogx;
#[link_name = "__updlastlogx50"]
pub fn updlastlogx(fname: *const c_char, uid: crate::uid_t, ll: *mut lastlogx) -> c_int;
#[link_name = "__getutmp50"]
pub fn getutmp(ux: *const utmpx, u: *mut crate::utmp);
#[link_name = "__getutmpx50"]
pub fn getutmpx(u: *const crate::utmp, ux: *mut utmpx);
pub fn utmpxname(file: *const c_char) -> c_int;
}