summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2019-06-22 20:12:24 +0300
committerMarius Vlad <marius.vlad@collabora.com>2019-07-18 13:34:04 +0300
commit8b3ab3cd9bc32cc26d507105f7a953a9fab33be3 (patch)
tree1378056d32633721f091ca07a3eb83d710e4ecd6
parentdad882a12e74b41b3d9aee8b2fec03017ef44bc8 (diff)
downloadweston-8b3ab3cd9bc32cc26d507105f7a953a9fab33be3.tar.gz
weston-log-file: Introduce file type of stream
With the logging infrastructure in place this patch add a new user: file type of stream backed-up by a std file descriptor. Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
-rw-r--r--include/libweston/weston-log.h8
-rw-r--r--libweston/meson.build1
-rw-r--r--libweston/weston-log-file.c100
3 files changed, 109 insertions, 0 deletions
diff --git a/include/libweston/weston-log.h b/include/libweston/weston-log.h
index c07ac75d..d59f2db1 100644
--- a/include/libweston/weston-log.h
+++ b/include/libweston/weston-log.h
@@ -29,6 +29,8 @@
#include <stdbool.h>
#include <stdlib.h>
#include <stdarg.h>
+#include <stdint.h>
+#include <stdio.h>
#ifdef __cplusplus
extern "C" {
@@ -104,6 +106,12 @@ weston_log_subscribe(struct weston_log_context *log_ctx,
struct weston_log_subscriber *subscriber,
const char *scope_name);
+struct weston_log_subscriber *
+weston_log_subscriber_create_log(FILE *dump_to);
+
+void
+weston_log_subscriber_destroy_log(struct weston_log_subscriber *sub);
+
#ifdef __cplusplus
}
#endif
diff --git a/libweston/meson.build b/libweston/meson.build
index a16c87c4..005be947 100644
--- a/libweston/meson.build
+++ b/libweston/meson.build
@@ -27,6 +27,7 @@ srcs_libweston = [
'timeline.c',
'touch-calibration.c',
'weston-log-wayland.c',
+ 'weston-log-file.c',
'weston-log.c',
'zoom.c',
'../shared/matrix.c',
diff --git a/libweston/weston-log-file.c b/libweston/weston-log-file.c
new file mode 100644
index 00000000..c1c91ae4
--- /dev/null
+++ b/libweston/weston-log-file.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright © 2019 Collabora Ltd.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include "config.h"
+
+#include <libweston/weston-log.h>
+#include "helpers.h"
+#include <libweston/libweston.h>
+
+#include "weston-log-internal.h"
+
+#include <stdio.h>
+
+/** File type of stream
+ */
+struct weston_debug_log_file {
+ struct weston_log_subscriber base;
+ FILE *file;
+};
+
+static struct weston_debug_log_file *
+to_weston_debug_log_file(struct weston_log_subscriber *sub)
+{
+ return container_of(sub, struct weston_debug_log_file, base);
+}
+
+static void
+weston_log_file_write(struct weston_log_subscriber *sub,
+ const char *data, size_t len)
+{
+ struct weston_debug_log_file *stream = to_weston_debug_log_file(sub);
+ fwrite(data, len, 1, stream->file);
+}
+
+/** Creates a file type of subscriber
+ *
+ * Should be destroyed using weston_log_subscriber_destroy_log()
+ *
+ * @param dump_to if specified, used for writing data to
+ * @returns a weston_log_subscriber object or NULL in case of failure
+ *
+ * @sa weston_log_subscriber_destroy_log
+ *
+ */
+WL_EXPORT struct weston_log_subscriber *
+weston_log_subscriber_create_log(FILE *dump_to)
+{
+ struct weston_debug_log_file *file = zalloc(sizeof(*file));
+
+ if (!file)
+ return NULL;
+
+ if (dump_to)
+ file->file = dump_to;
+ else
+ file->file = stderr;
+
+
+ file->base.write = weston_log_file_write;
+ file->base.destroy = NULL;
+ file->base.complete = NULL;
+
+ wl_list_init(&file->base.subscription_list);
+
+ return &file->base;
+}
+
+/** Destroy the subscriber created with weston_log_subscriber_create_log
+ *
+ * @param subscriber the weston_log_subscriber object to destroy
+ *
+ */
+WL_EXPORT void
+weston_log_subscriber_destroy_log(struct weston_log_subscriber *subscriber)
+{
+ struct weston_debug_log_file *file = to_weston_debug_log_file(subscriber);
+ free(file);
+}