aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/evdev.c26
-rw-r--r--common/wscons.c27
-rw-r--r--include/evdev.h5
-rw-r--r--include/seat.h1
-rw-r--r--include/wscons.h6
-rw-r--r--meson.build1
-rw-r--r--seatd/seat.c12
7 files changed, 51 insertions, 27 deletions
diff --git a/common/evdev.c b/common/evdev.c
index d2398fb..7ec0fe2 100644
--- a/common/evdev.c
+++ b/common/evdev.c
@@ -9,11 +9,6 @@
#include <sys/sysmacros.h>
#elif defined(__FreeBSD__)
#include <dev/evdev/input.h>
-#elif defined(__NetBSD__)
-#include <stdlib.h>
-#include <sys/stat.h>
-#else
-#error Unsupported platform
#endif
#include "evdev.h"
@@ -30,28 +25,15 @@ int path_is_evdev(const char *path) {
int evdev_revoke(int fd) {
return ioctl(fd, EVIOCREVOKE, NULL);
}
-#endif
-
-#if defined(__linux__)
-int dev_is_evdev(dev_t device) {
- return major(device) == INPUT_MAJOR;
-}
#elif defined(__NetBSD__)
-int dev_is_evdev(dev_t device) {
- return major(device) == getdevmajor("wskbd", S_IFCHR) ||
- major(device) == getdevmajor("wsmouse", S_IFCHR) ||
- major(device) == getdevmajor("wsmux", S_IFCHR);
-}
int path_is_evdev(const char *path) {
- const char *wskbd = "/dev/wskbd";
- const char *wsmouse = "/dev/wsmouse";
- const char *wsmux = "/dev/wsmux";
- return strncmp(path, wskbd, STRLEN(wskbd)) == 0 ||
- strncmp(path, wsmouse, STRLEN(wsmouse)) == 0 ||
- strncmp(path, wsmux, STRLEN(wsmouse)) == 0;
+ (void)path;
+ return 0;
}
int evdev_revoke(int fd) {
(void)fd;
return 0;
}
+#else
+#error Unsupported platform
#endif
diff --git a/common/wscons.c b/common/wscons.c
new file mode 100644
index 0000000..7fc8df5
--- /dev/null
+++ b/common/wscons.c
@@ -0,0 +1,27 @@
+#include <stdlib.h>
+#include <string.h>
+
+#if defined(__NetBSD__)
+#include <stdlib.h>
+#include <sys/stat.h>
+#endif
+
+#include "wscons.h"
+
+#define STRLEN(s) ((sizeof(s) / sizeof(s[0])) - 1)
+
+#if defined(__NetBSD__)
+int path_is_wscons(const char *path) {
+ const char *wskbd = "/dev/wskbd";
+ const char *wsmouse = "/dev/wsmouse";
+ const char *wsmux = "/dev/wsmux";
+ return strncmp(path, wskbd, STRLEN(wskbd)) == 0 ||
+ strncmp(path, wsmouse, STRLEN(wsmouse)) == 0 ||
+ strncmp(path, wsmux, STRLEN(wsmouse)) == 0;
+}
+#else
+int path_is_wscons(const char *path) {
+ (void)path;
+ return 0;
+}
+#endif
diff --git a/include/evdev.h b/include/evdev.h
index da57828..5e6cfbf 100644
--- a/include/evdev.h
+++ b/include/evdev.h
@@ -4,9 +4,4 @@
int evdev_revoke(int fd);
int path_is_evdev(const char *path);
-#if defined(__linux__) || defined(__NetBSD__)
-#include <sys/types.h>
-int dev_is_evdev(dev_t device);
-#endif
-
#endif
diff --git a/include/seat.h b/include/seat.h
index cc243b6..ff857e7 100644
--- a/include/seat.h
+++ b/include/seat.h
@@ -13,6 +13,7 @@ enum seat_device_type {
SEAT_DEVICE_TYPE_NORMAL,
SEAT_DEVICE_TYPE_EVDEV,
SEAT_DEVICE_TYPE_DRM,
+ SEAT_DEVICE_TYPE_WSCONS,
};
struct seat_device {
diff --git a/include/wscons.h b/include/wscons.h
new file mode 100644
index 0000000..bf0c10c
--- /dev/null
+++ b/include/wscons.h
@@ -0,0 +1,6 @@
+#ifndef _SEATD_WSCONS_H
+#define _SEATD_WSCONS_H
+
+int path_is_wscons(const char *path);
+
+#endif
diff --git a/meson.build b/meson.build
index 337a4ae..661b39a 100644
--- a/meson.build
+++ b/meson.build
@@ -114,6 +114,7 @@ server_files = [
'common/connection.c',
'common/evdev.c',
'common/drm.c',
+ 'common/wscons.c',
'seatd/poller.c',
'seatd/seat.c',
'seatd/client.c',
diff --git a/seatd/seat.c b/seatd/seat.c
index 354273f..7a66a20 100644
--- a/seatd/seat.c
+++ b/seatd/seat.c
@@ -17,6 +17,7 @@
#include "protocol.h"
#include "seat.h"
#include "terminal.h"
+#include "wscons.h"
static int seat_close_client(struct client *client);
static int vt_close(int vt);
@@ -235,6 +236,8 @@ struct seat_device *seat_open_device(struct client *client, const char *path) {
type = SEAT_DEVICE_TYPE_EVDEV;
} else if (path_is_drm(sanitized_path)) {
type = SEAT_DEVICE_TYPE_DRM;
+ } else if (path_is_wscons(sanitized_path)) {
+ type = SEAT_DEVICE_TYPE_WSCONS;
} else {
log_errorf("%s is not a supported device type ", sanitized_path);
errno = ENOENT;
@@ -281,6 +284,9 @@ struct seat_device *seat_open_device(struct client *client, const char *path) {
case SEAT_DEVICE_TYPE_EVDEV:
// Nothing to do here
break;
+ case SEAT_DEVICE_TYPE_WSCONS:
+ // Nothing to do here
+ break;
default:
log_error("Invalid seat device type");
abort();
@@ -333,6 +339,9 @@ static int seat_deactivate_device(struct seat_device *seat_device) {
return -1;
}
break;
+ case SEAT_DEVICE_TYPE_WSCONS:
+ // Nothing to do here
+ break;
default:
log_error("Invalid seat device type");
abort();
@@ -382,6 +391,9 @@ static int seat_activate_device(struct client *client, struct seat_device *seat_
case SEAT_DEVICE_TYPE_EVDEV:
errno = EINVAL;
return -1;
+ case SEAT_DEVICE_TYPE_WSCONS:
+ // Nothing to do here
+ break;
default:
log_error("Invalid seat device type");
abort();