blob: d9bdbf8cab757b9828d938be28a36db121568ec4 [file] [log] [blame]
Martin Minarik19e6f262012-06-07 13:08:46 +02001/*
2 * Copyright © 2012 Martin Minarik
3 *
Bryce Harringtona0bbfea2015-06-11 15:35:43 -07004 * Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sublicense, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
Martin Minarik19e6f262012-06-07 13:08:46 +020011 *
Bryce Harringtona0bbfea2015-06-11 15:35:43 -070012 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial
14 * portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
20 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
Martin Minarik19e6f262012-06-07 13:08:46 +020024 */
25
Daniel Stonec228e232013-05-22 18:03:19 +030026#include "config.h"
27
Martin Minarik19e6f262012-06-07 13:08:46 +020028#include <stdio.h>
29#include <stdarg.h>
30#include <stdlib.h>
31#include <string.h>
Martin Minarikeb587652012-06-08 20:59:53 +020032#include <sys/time.h>
Martin Minarik19e6f262012-06-07 13:08:46 +020033#include <time.h>
34
Martin Minarik19e6f262012-06-07 13:08:46 +020035#include <wayland-util.h>
36
Kristian Høgsberg64eca892012-08-01 00:00:57 -040037#include "compositor.h"
Martin Minarik19e6f262012-06-07 13:08:46 +020038
Matt Hoosier74742e02018-05-04 09:26:34 -050039static int
40default_log_handler(const char *fmt, va_list ap);
41
42static log_func_t log_handler = default_log_handler;
43static log_func_t log_continue_handler = default_log_handler;
44
45/** Sentinel log message handler
46 *
47 * This function is used as the default handler for log messages. It
48 * exists only to issue a noisy reminder to the user that a real handler
49 * must be installed prior to issuing logging calls. The process is
50 * immediately aborted after the reminder is printed.
51 *
52 * \param fmt The format string. Ignored.
53 * \param va The variadic argument list. Ignored.
54 */
55static int
56default_log_handler(const char *fmt, va_list ap)
57{
58 fprintf(stderr, "weston_log_set_handler() must be called before using of weston_log().\n");
59 abort();
60}
Derek Foreman6bc33d62015-06-08 11:37:31 -050061
Giulio Camuffobe2b11a2016-06-02 21:48:13 +030062/** Install the log handler
63 *
64 * The given functions will be called to output text as passed to the
65 * \a weston_log and \a weston_log_continue functions.
66 *
67 * \param log The log function. This function will be called when
68 * \a weston_log is called, and should begin a new line,
69 * with user defined line headers, if any.
70 * \param cont The continue log function. This function will be called
71 * when \a weston_log_continue is called, and should append
72 * its output to the current line, without any header or
73 * other content in between.
74 */
75WL_EXPORT void
76weston_log_set_handler(log_func_t log, log_func_t cont)
Martin Minarik19e6f262012-06-07 13:08:46 +020077{
Giulio Camuffobe2b11a2016-06-02 21:48:13 +030078 log_handler = log;
79 log_continue_handler = cont;
Martin Minarik19e6f262012-06-07 13:08:46 +020080}
81
82WL_EXPORT int
Kristian Høgsberg082d58c2013-06-18 01:00:27 -040083weston_vlog(const char *fmt, va_list ap)
84{
Giulio Camuffobe2b11a2016-06-02 21:48:13 +030085 return log_handler(fmt, ap);
Kristian Høgsberg082d58c2013-06-18 01:00:27 -040086}
87
88WL_EXPORT int
Martin Minarik19e6f262012-06-07 13:08:46 +020089weston_log(const char *fmt, ...)
90{
91 int l;
92 va_list argp;
Kristian Høgsberg082d58c2013-06-18 01:00:27 -040093
Martin Minarik19e6f262012-06-07 13:08:46 +020094 va_start(argp, fmt);
Kristian Høgsberg082d58c2013-06-18 01:00:27 -040095 l = weston_vlog(fmt, argp);
Martin Minarik19e6f262012-06-07 13:08:46 +020096 va_end(argp);
Kristian Høgsberg082d58c2013-06-18 01:00:27 -040097
Martin Minarik19e6f262012-06-07 13:08:46 +020098 return l;
99}
100
101WL_EXPORT int
Kristian Høgsberg082d58c2013-06-18 01:00:27 -0400102weston_vlog_continue(const char *fmt, va_list argp)
103{
Giulio Camuffobe2b11a2016-06-02 21:48:13 +0300104 return log_continue_handler(fmt, argp);
Kristian Høgsberg082d58c2013-06-18 01:00:27 -0400105}
106
107WL_EXPORT int
Martin Minarik19e6f262012-06-07 13:08:46 +0200108weston_log_continue(const char *fmt, ...)
109{
110 int l;
111 va_list argp;
Kristian Høgsberg082d58c2013-06-18 01:00:27 -0400112
Martin Minarik19e6f262012-06-07 13:08:46 +0200113 va_start(argp, fmt);
Kristian Høgsberg082d58c2013-06-18 01:00:27 -0400114 l = weston_vlog_continue(fmt, argp);
Martin Minarik19e6f262012-06-07 13:08:46 +0200115 va_end(argp);
Kristian Høgsberg082d58c2013-06-18 01:00:27 -0400116
Martin Minarik19e6f262012-06-07 13:08:46 +0200117 return l;
118}