1
From 47b7e20d7acd2cc64caf379eb6cd385705d3e90d Mon Sep 17 00:00:00 2001
2
From: Guido Berhoerster <gber@openindiana.org>
3
Date: Mon, 28 Mar 2011 17:19:40 +0200
4
Subject: [PATCH] Solaris-specific code for determining the start time of a
7
Solaris also allows to obtain this information through procfs,
8
however design and implementation differ vastly from Linux.
10
src/xfpm-polkit.c | 40 +++++++++++++++++++++++++++++++++++-----
11
1 files changed, 35 insertions(+), 5 deletions(-)
13
diff --git a/src/xfpm-polkit.c b/src/xfpm-polkit.c
14
index a50c2db..29fcf7d 100644
15
--- a/src/xfpm-polkit.c
16
+++ b/src/xfpm-polkit.c
19
#include <sys/types.h>
21
-#if defined(__FreeBSD__)
22
-#include <sys/stat.h>
25
#include <sys/param.h>
26
#include <sys/sysctl.h>
28
+#elif defined(__FreeBSD__)
29
+#include <sys/stat.h>
30
+#elif defined(__SVR4) || defined(__sun)
36
@@ -115,7 +118,7 @@ static guint64
37
get_start_time_for_pid (pid_t pid)
40
-#if !defined(__FreeBSD__)
45
@@ -172,7 +175,7 @@ get_start_time_for_pid (pid_t pid)
49
-#else /*if !defined(__FreeBSD__)*/
50
+#elif defined(__FreeBSD__)
54
@@ -189,6 +192,33 @@ get_start_time_for_pid (pid_t pid)
55
start_time = (guint64) p.ki_start.tv_sec;
58
+#elif defined(__SVR4) || defined(__sun)
66
+ filename = g_strdup_printf ("/proc/%d/psinfo", (int) pid);
67
+ if ((fd = open(filename, O_RDONLY)) < 0)
69
+ g_warning ("Error opening %s (%s)",
71
+ g_strerror (errno));
74
+ if (read(fd, &p, sizeof (p)) != sizeof (p))
76
+ g_warning ("Error reading %s",
81
+ start_time = (guint64) p.pr_start.tv_sec;