summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ck-seat.c15
-rw-r--r--src/ck-sysdeps-linux.c35
-rw-r--r--src/ck-sysdeps-solaris.c35
-rw-r--r--src/ck-sysdeps.h8
4 files changed, 80 insertions, 13 deletions
diff --git a/src/ck-seat.c b/src/ck-seat.c
index fb2d288..e04b569 100644
--- a/src/ck-seat.c
+++ b/src/ck-seat.c
@@ -25,13 +25,6 @@
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
-#ifdef HAVE_PATHS_H
-#include <paths.h>
-#endif /* HAVE_PATHS_H */
-
-#ifndef _PATH_TTY
-#define _PATH_TTY "/dev/tty"
-#endif
#include <glib.h>
#include <glib/gi18n.h>
@@ -41,6 +34,8 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
+#include "ck-sysdeps.h"
+
#include "ck-seat.h"
#include "ck-seat-glue.h"
#include "ck-marshal.h"
@@ -173,6 +168,7 @@ _seat_activate_session (CkSeat *seat,
CkSession *session,
DBusGMethodInvocation *context)
{
+ gboolean res;
gboolean ret;
guint num;
char *device;
@@ -206,7 +202,8 @@ _seat_activate_session (CkSeat *seat,
ck_session_get_display_device (session, &device, NULL);
- if (device == NULL || (sscanf (device, _PATH_TTY "%u", &num) != 1)) {
+ res = ck_get_console_num_from_device (device, &num);
+ if (! res) {
GError *error;
error = g_error_new (CK_SEAT_ERROR,
CK_SEAT_ERROR_GENERAL,
@@ -490,7 +487,7 @@ update_active_vt (CkSeat *seat,
CkSession *session;
char *device;
- device = g_strdup_printf (_PATH_TTY "%u", num);
+ device = ck_get_console_device_for_num (num);
g_debug ("Active device: %s", device);
diff --git a/src/ck-sysdeps-linux.c b/src/ck-sysdeps-linux.c
index 4b751d7..0ff0fe6 100644
--- a/src/ck-sysdeps-linux.c
+++ b/src/ck-sysdeps-linux.c
@@ -617,3 +617,38 @@ ck_get_max_num_consoles (guint *num)
return TRUE;
}
+
+char *
+ck_get_console_device_for_num (guint num)
+{
+ char *device;
+
+ device = g_strdup_printf (_PATH_TTY "%u", num);
+
+ return device;
+}
+
+gboolean
+ck_get_console_num_from_device (const char *device,
+ guint *num)
+{
+ guint n;
+ gboolean ret;
+
+ n = 0;
+ ret = FALSE;
+
+ if (device == NULL) {
+ return FALSE;
+ }
+
+ if (sscanf (device, _PATH_TTY "%u", &n) == 1) {
+ ret = TRUE;
+ }
+
+ if (num != NULL) {
+ *num = n;
+ }
+
+ return ret;
+}
diff --git a/src/ck-sysdeps-solaris.c b/src/ck-sysdeps-solaris.c
index c1b1b64..ba7d5aa 100644
--- a/src/ck-sysdeps-solaris.c
+++ b/src/ck-sysdeps-solaris.c
@@ -379,3 +379,38 @@ ck_get_max_num_consoles (guint *num)
return ret;
}
+
+char *
+ck_get_console_device_for_num (guint num)
+{
+ char *device;
+
+ device = g_strdup_printf ("/dev/vt/%u", num);
+
+ return device;
+}
+
+gboolean
+ck_get_console_num_from_device (const char *device,
+ guint *num)
+{
+ guint n;
+ gboolean ret;
+
+ n = 0;
+ ret = FALSE;
+
+ if (device == NULL) {
+ return FALSE;
+ }
+
+ if (sscanf (device, "/dev/vt/%u", &n) == 1) {
+ ret = TRUE;
+ }
+
+ if (num != NULL) {
+ *num = n;
+ }
+
+ return ret;
+}
diff --git a/src/ck-sysdeps.h b/src/ck-sysdeps.h
index 986018e..3ef7c14 100644
--- a/src/ck-sysdeps.h
+++ b/src/ck-sysdeps.h
@@ -25,10 +25,6 @@
#include <glib.h>
-#ifdef HAVE_PATHS_H
-#include <paths.h>
-#endif /* HAVE_PATHS_H */
-
G_BEGIN_DECLS
typedef struct _CkProcessStat CkProcessStat;
@@ -64,6 +60,10 @@ gboolean ck_is_root_user (void);
gboolean ck_get_max_num_consoles (guint *num);
+char * ck_get_console_device_for_num (guint num);
+gboolean ck_get_console_num_from_device (const char *device,
+ guint *num);
+
G_END_DECLS
#endif /* __CK_SYSDEPS_H */