aboutsummaryrefslogtreecommitdiffstats
path: root/sdk/std/utmp.c
blob: 78cbf64f515d7b120b35090784ba2425409d2811 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
 * Portable emulation of utmp access routines, such as for broken BSD.
 * $Id$
 * Copyright (c) 1997 by Tycho Softworks.
 * For conditions of distribution and use see license.
 */

#include <std/utmp.h>
#include <std/files.h>

#ifdef	GETUTENT_F_MISSING

static	fd_t	ut = -1;
static	struct	utmp	utmp;

void	setutent(void)
{
	if(ut < 0)
		ut = open(_PATH_UTMP, O_RDONLY);
	if(ut < 0)
		return;

	lseek(ut, 0l, SEEK_SET);
}

void	endutent(void)
{
	if(ut > -1)
	{
		close(ut);
		ut = -1;
	}
}

struct	utmp	*getutent(void)
{
	if(ut < 0)
		setutent();

	if(ut < 0)
		return NULL;

	if(read(ut, &utmp, sizeof(utmp)) < sizeof(utmp))
		return NULL;

	return &utmp;
}

#endif