summaryrefslogtreecommitdiff
path: root/sysutils/gkrellm2/files/patch-src::sysdeps::freebsd.c
blob: 8ec53cd393c512bbeb08ead35f419a8e799fa79a (plain) (blame)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Index: src/sysdeps/freebsd.c
diff -u -p src/sysdeps/freebsd.c.orig src/sysdeps/freebsd.c
--- src/sysdeps/freebsd.c.orig	2010-01-05 08:12:21.000000000 +0900
+++ src/sysdeps/freebsd.c	2010-01-19 20:13:55.380695497 +0900
@@ -255,7 +255,11 @@ pcpu_probe_done:
 
 #include <limits.h>
 #include <paths.h>
+#if __FreeBSD_version < 900007
 #include <utmp.h>
+#else
+#include <utmpx.h>
+#endif
 
 static int	oid_v_forks[CTL_MAXNAME + 2];
 static int	oid_v_vforks[CTL_MAXNAME + 2];
@@ -364,12 +368,20 @@ gkrellm_sys_proc_read_users(void)
 	gint		n_users;
 	struct stat	sb, s;
 	gchar		ttybuf[MAXPATHLEN];
+#ifdef _PATH_UTMP
 	FILE		*ut;
 	struct utmp	utmp;
+#define UTMP_FILE	_PATH_UTMP
+#else
+	struct utmpx	*utmp;
+#define UTMP_FILE	"/var/run/utx.active"
+#endif
 	static time_t	utmp_mtime;
 
-	if (stat(_PATH_UTMP, &s) != 0 || s.st_mtime == utmp_mtime)
+	if (stat(UTMP_FILE, &s) != 0 || s.st_mtime == utmp_mtime)
 		return;
+
+#ifdef _PATH_UTMP
 	if ((ut = fopen(_PATH_UTMP, "r")) != NULL)
 		{
 		n_users = 0;
@@ -379,14 +391,30 @@ gkrellm_sys_proc_read_users(void)
 				continue;
 			(void)snprintf(ttybuf, sizeof(ttybuf), "%s/%s",
 				       _PATH_DEV, utmp.ut_line);
-			/* corrupted record */
 			if (stat(ttybuf, &sb))
-				continue;
+				continue;	/* corrupted record */
 			++n_users;
 			}
 		(void)fclose(ut);
 		gkrellm_proc_assign_users(n_users);
 		}
+#else
+	setutxent();
+	n_users = 0;
+	while ((utmp = getutxent()) != NULL)
+		{
+		if (utmp->ut_type != USER_PROCESS)
+			continue;
+		(void)snprintf(ttybuf, sizeof(ttybuf), "%s/%s",
+			       _PATH_DEV, utmp->ut_line);
+		if (stat(ttybuf, &sb))
+			continue;		/* corrupted record */
+		++n_users;
+		}
+	endutxent();
+	gkrellm_proc_assign_users(n_users);
+#endif
+
 	utmp_mtime = s.st_mtime;
 	}