[PATCH libinput 4/8] tools: move opening the backend to the shared lib too
Peter Hutterer
peter.hutterer at who-t.net
Thu Dec 18 15:16:19 PST 2014
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
tools/event-debug.c | 79 ++--------------------------------------------
tools/shared.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++
tools/shared.h | 4 +++
3 files changed, 98 insertions(+), 76 deletions(-)
diff --git a/tools/event-debug.c b/tools/event-debug.c
index 184c68f..b8be215 100644
--- a/tools/event-debug.c
+++ b/tools/event-debug.c
@@ -38,8 +38,6 @@
#include "shared.h"
-static const char *device;
-static struct udev *udev;
uint32_t start_time;
static const uint32_t screen_width = 100;
static const uint32_t screen_height = 100;
@@ -64,70 +62,6 @@ static const struct libinput_interface interface = {
};
static void
-log_handler(struct libinput *li,
- enum libinput_log_priority priority,
- const char *format,
- va_list args)
-{
- vprintf(format, args);
-}
-
-static int
-open_udev(struct libinput **li)
-{
- udev = udev_new();
- if (!udev) {
- fprintf(stderr, "Failed to initialize udev\n");
- return 1;
- }
-
- *li = libinput_udev_create_context(&interface, NULL, udev);
- if (!*li) {
- fprintf(stderr, "Failed to initialize context from udev\n");
- return 1;
- }
-
- if (options.verbose) {
- libinput_log_set_handler(*li, log_handler);
- libinput_log_set_priority(*li, LIBINPUT_LOG_PRIORITY_DEBUG);
- }
-
- if (libinput_udev_assign_seat(*li, options.seat)) {
- fprintf(stderr, "Failed to set seat\n");
- libinput_unref(*li);
- return 1;
- }
-
- return 0;
-}
-
-static int
-open_device(struct libinput **li, const char *path)
-{
- struct libinput_device *device;
-
- *li = libinput_path_create_context(&interface, NULL);
- if (!*li) {
- fprintf(stderr, "Failed to initialize context from %s\n", path);
- return 1;
- }
-
- if (options.verbose) {
- libinput_log_set_handler(*li, log_handler);
- libinput_log_set_priority(*li, LIBINPUT_LOG_PRIORITY_DEBUG);
- }
-
- device = libinput_path_add_device(*li, path);
- if (!device) {
- fprintf(stderr, "Failed to initialized device %s\n", path);
- libinput_unref(*li);
- return 1;
- }
-
- return 0;
-}
-
-static void
print_event_header(struct libinput_event *ev)
{
struct libinput_device *dev = libinput_event_get_device(ev);
@@ -440,14 +374,9 @@ main(int argc, char **argv)
if (tools_parse_args(argc, argv, &options))
return 1;
- if (options.backend == BACKEND_UDEV) {
- if (open_udev(&li))
- return 1;
- } else if (options.backend == BACKEND_DEVICE) {
- if (open_device(&li, device))
- return 1;
- } else
- abort();
+ li = tools_open_backend(&options, &interface);
+ if (!li)
+ return 1;
clock_gettime(CLOCK_MONOTONIC, &tp);
start_time = tp.tv_sec * 1000 + tp.tv_nsec / 1000000;
@@ -455,8 +384,6 @@ main(int argc, char **argv)
mainloop(li);
libinput_unref(li);
- if (udev)
- udev_unref(udev);
return 0;
}
diff --git a/tools/shared.c b/tools/shared.c
index 17a9673..f8ceb34 100644
--- a/tools/shared.c
+++ b/tools/shared.c
@@ -28,6 +28,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <libudev.h>
#include "shared.h"
@@ -40,6 +41,15 @@ enum options {
OPT_TAP_DISABLE,
};
+static void
+log_handler(struct libinput *li,
+ enum libinput_log_priority priority,
+ const char *format,
+ va_list args)
+{
+ vprintf(format, args);
+}
+
void
tools_usage()
{
@@ -131,3 +141,84 @@ tools_parse_args(int argc, char **argv, struct tools_options *options)
return 0;
}
+
+static struct libinput *
+open_udev(const struct libinput_interface *interface,
+ const char *seat,
+ int verbose)
+{
+ struct libinput *li;
+ struct udev *udev = udev_new();
+
+ if (!udev) {
+ fprintf(stderr, "Failed to initialize udev\n");
+ return NULL;
+ }
+
+ li = libinput_udev_create_context(interface, NULL, udev);
+ if (!li) {
+ fprintf(stderr, "Failed to initialize context from udev\n");
+ goto out;
+ }
+
+ if (verbose) {
+ libinput_log_set_handler(li, log_handler);
+ libinput_log_set_priority(li, LIBINPUT_LOG_PRIORITY_DEBUG);
+ }
+
+ if (libinput_udev_assign_seat(li, seat)) {
+ fprintf(stderr, "Failed to set seat\n");
+ libinput_unref(li);
+ li = NULL;
+ goto out;
+ }
+
+out:
+ udev_unref(udev);
+ return li;
+}
+
+static struct libinput *
+open_device(const struct libinput_interface *interface,
+ const char *path,
+ int verbose)
+{
+ struct libinput_device *device;
+ struct libinput *li;
+
+ li = libinput_path_create_context(interface, NULL);
+ if (!li) {
+ fprintf(stderr, "Failed to initialize context from %s\n", path);
+ return NULL;
+ }
+
+ if (verbose) {
+ libinput_log_set_handler(li, log_handler);
+ libinput_log_set_priority(li, LIBINPUT_LOG_PRIORITY_DEBUG);
+ }
+
+ device = libinput_path_add_device(li, path);
+ if (!device) {
+ fprintf(stderr, "Failed to initialized device %s\n", path);
+ libinput_unref(li);
+ li = NULL;
+ }
+
+ return li;
+}
+
+struct libinput *
+tools_open_backend(struct tools_options *options,
+ const struct libinput_interface *interface)
+{
+ struct libinput *li = NULL;
+
+ if (options->backend == BACKEND_UDEV) {
+ li = open_udev(interface, options->seat, options->verbose);
+ } else if (options->backend == BACKEND_DEVICE) {
+ li = open_device(interface, options->device, options->verbose);
+ } else
+ abort();
+
+ return li;
+}
diff --git a/tools/shared.h b/tools/shared.h
index fa7c5ef..04d1369 100644
--- a/tools/shared.h
+++ b/tools/shared.h
@@ -23,6 +23,8 @@
#ifndef _SHARED_H_
#define _SHARED_H_
+#include <libinput.h>
+
enum tools_backend {
BACKEND_DEVICE,
BACKEND_UDEV
@@ -39,6 +41,8 @@ struct tools_options {
void tools_init_options(struct tools_options *options);
int tools_parse_args(int argc, char **argv, struct tools_options *options);
+struct libinput* tools_open_backend(struct tools_options *options,
+ const struct libinput_interface *interface);
void tools_usage();
--
2.1.0
More information about the wayland-devel
mailing list