mirror of
https://github.com/swaywm/sway.git
synced 2025-10-29 05:40:18 -04:00
Replace wlr_log with sway_log
This commit mostly duplicates the wlr_log functions, although with a sway_* prefix. (This is very similar to PR #2009.) However, the logging function no longer needs to be replaceable, so sway_log_init's second argument is used to set the exit callback for sway_abort. wlr_log_init is still invoked in sway/main.c This commit makes it easier to remove the wlroots dependency for the helper programs swaymsg, swaybg, swaybar, and swaynag.
This commit is contained in:
parent
5c834d36e1
commit
1211a81aad
108 changed files with 613 additions and 504 deletions
|
|
@ -1,8 +1,8 @@
|
|||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <wlr/util/log.h>
|
||||
#include "background-image.h"
|
||||
#include "cairo.h"
|
||||
#include "log.h"
|
||||
|
||||
enum background_mode parse_background_mode(const char *mode) {
|
||||
if (strcmp(mode, "stretch") == 0) {
|
||||
|
|
@ -18,7 +18,7 @@ enum background_mode parse_background_mode(const char *mode) {
|
|||
} else if (strcmp(mode, "solid_color") == 0) {
|
||||
return BACKGROUND_MODE_SOLID_COLOR;
|
||||
}
|
||||
wlr_log(WLR_ERROR, "Unsupported background mode: %s", mode);
|
||||
sway_log(SWAY_ERROR, "Unsupported background mode: %s", mode);
|
||||
return BACKGROUND_MODE_INVALID;
|
||||
}
|
||||
|
||||
|
|
@ -28,7 +28,7 @@ cairo_surface_t *load_background_image(const char *path) {
|
|||
GError *err = NULL;
|
||||
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, &err);
|
||||
if (!pixbuf) {
|
||||
wlr_log(WLR_ERROR, "Failed to load background image (%s).",
|
||||
sway_log(SWAY_ERROR, "Failed to load background image (%s).",
|
||||
err->message);
|
||||
return false;
|
||||
}
|
||||
|
|
@ -38,11 +38,11 @@ cairo_surface_t *load_background_image(const char *path) {
|
|||
image = cairo_image_surface_create_from_png(path);
|
||||
#endif // HAVE_GDK_PIXBUF
|
||||
if (!image) {
|
||||
wlr_log(WLR_ERROR, "Failed to read background image.");
|
||||
sway_log(SWAY_ERROR, "Failed to read background image.");
|
||||
return NULL;
|
||||
}
|
||||
if (cairo_surface_status(image) != CAIRO_STATUS_SUCCESS) {
|
||||
wlr_log(WLR_ERROR, "Failed to read background image: %s."
|
||||
sway_log(SWAY_ERROR, "Failed to read background image: %s."
|
||||
#if !HAVE_GDK_PIXBUF
|
||||
"\nSway was compiled without gdk_pixbuf support, so only"
|
||||
"\nPNG images can be loaded. This is the likely cause."
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ error_2:
|
|||
free(response);
|
||||
free(payload);
|
||||
error_1:
|
||||
wlr_log(WLR_ERROR, "Unable to allocate memory for IPC response");
|
||||
sway_log(SWAY_ERROR, "Unable to allocate memory for IPC response");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
89
common/log.c
89
common/log.c
|
|
@ -1,16 +1,20 @@
|
|||
#define _POSIX_C_SOURCE 199506L
|
||||
#include <signal.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include "log.h"
|
||||
|
||||
void sway_terminate(int code);
|
||||
static terminate_callback_t log_terminate = exit;
|
||||
|
||||
void _sway_abort(const char *format, ...) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
_wlr_vlog(WLR_ERROR, format, args);
|
||||
_sway_vlog(SWAY_ERROR, format, args);
|
||||
va_end(args);
|
||||
sway_terminate(EXIT_FAILURE);
|
||||
log_terminate(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
bool _sway_assert(bool condition, const char *format, ...) {
|
||||
|
|
@ -20,7 +24,7 @@ bool _sway_assert(bool condition, const char *format, ...) {
|
|||
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
_wlr_vlog(WLR_ERROR, format, args);
|
||||
_sway_vlog(SWAY_ERROR, format, args);
|
||||
va_end(args);
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
|
@ -29,3 +33,80 @@ bool _sway_assert(bool condition, const char *format, ...) {
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool colored = true;
|
||||
static sway_log_importance_t log_importance = SWAY_ERROR;
|
||||
|
||||
static const char *verbosity_colors[] = {
|
||||
[SWAY_SILENT] = "",
|
||||
[SWAY_ERROR ] = "\x1B[1;31m",
|
||||
[SWAY_INFO ] = "\x1B[1;34m",
|
||||
[SWAY_DEBUG ] = "\x1B[1;30m",
|
||||
};
|
||||
|
||||
static void sway_log_stderr(sway_log_importance_t verbosity, const char *fmt,
|
||||
va_list args) {
|
||||
if (verbosity > log_importance) {
|
||||
return;
|
||||
}
|
||||
// prefix the time to the log message
|
||||
struct tm result;
|
||||
time_t t = time(NULL);
|
||||
struct tm *tm_info = localtime_r(&t, &result);
|
||||
char buffer[26];
|
||||
|
||||
// generate time prefix
|
||||
strftime(buffer, sizeof(buffer), "%F %T - ", tm_info);
|
||||
fprintf(stderr, "%s", buffer);
|
||||
|
||||
unsigned c = (verbosity < SWAY_LOG_IMPORTANCE_LAST) ? verbosity :
|
||||
SWAY_LOG_IMPORTANCE_LAST - 1;
|
||||
|
||||
if (colored && isatty(STDERR_FILENO)) {
|
||||
fprintf(stderr, "%s", verbosity_colors[c]);
|
||||
}
|
||||
|
||||
vfprintf(stderr, fmt, args);
|
||||
|
||||
if (colored && isatty(STDERR_FILENO)) {
|
||||
fprintf(stderr, "\x1B[0m");
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
void sway_log_init(sway_log_importance_t verbosity, terminate_callback_t callback) {
|
||||
if (verbosity < SWAY_LOG_IMPORTANCE_LAST) {
|
||||
log_importance = verbosity;
|
||||
}
|
||||
if (callback) {
|
||||
log_terminate = callback;
|
||||
}
|
||||
}
|
||||
|
||||
void _sway_vlog(sway_log_importance_t verbosity, const char *fmt, va_list args) {
|
||||
sway_log_stderr(verbosity, fmt, args);
|
||||
}
|
||||
|
||||
void _sway_log(sway_log_importance_t verbosity, const char *fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
sway_log_stderr(verbosity, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
// strips the path prefix from filepath
|
||||
// will try to strip SWAY_SRC_DIR as well as a relative src dir
|
||||
// e.g. '/src/build/sway/util/log.c' and
|
||||
// '../util/log.c' will both be stripped to
|
||||
// 'util/log.c'
|
||||
const char *_sway_strip_path(const char *filepath) {
|
||||
static int srclen = sizeof(SWAY_SRC_DIR);
|
||||
if (strstr(filepath, SWAY_SRC_DIR) == filepath) {
|
||||
filepath += srclen;
|
||||
} else if (*filepath == '.') {
|
||||
while (*filepath == '.' || *filepath == '/') {
|
||||
++filepath;
|
||||
}
|
||||
}
|
||||
return filepath;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ struct loop {
|
|||
struct loop *loop_create(void) {
|
||||
struct loop *loop = calloc(1, sizeof(struct loop));
|
||||
if (!loop) {
|
||||
wlr_log(WLR_ERROR, "Unable to allocate memory for loop");
|
||||
sway_log(SWAY_ERROR, "Unable to allocate memory for loop");
|
||||
return NULL;
|
||||
}
|
||||
loop->fd_capacity = 10;
|
||||
|
|
@ -107,7 +107,7 @@ void loop_add_fd(struct loop *loop, int fd, short mask,
|
|||
void (*callback)(int fd, short mask, void *data), void *data) {
|
||||
struct loop_fd_event *event = calloc(1, sizeof(struct loop_fd_event));
|
||||
if (!event) {
|
||||
wlr_log(WLR_ERROR, "Unable to allocate memory for event");
|
||||
sway_log(SWAY_ERROR, "Unable to allocate memory for event");
|
||||
return;
|
||||
}
|
||||
event->callback = callback;
|
||||
|
|
@ -129,7 +129,7 @@ struct loop_timer *loop_add_timer(struct loop *loop, int ms,
|
|||
void (*callback)(void *data), void *data) {
|
||||
struct loop_timer *timer = calloc(1, sizeof(struct loop_timer));
|
||||
if (!timer) {
|
||||
wlr_log(WLR_ERROR, "Unable to allocate memory for timer");
|
||||
sway_log(SWAY_ERROR, "Unable to allocate memory for timer");
|
||||
return NULL;
|
||||
}
|
||||
timer->callback = callback;
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ PangoLayout *get_pango_layout(cairo_t *cairo, const char *font,
|
|||
pango_layout_set_text(layout, buf, -1);
|
||||
free(buf);
|
||||
} else {
|
||||
wlr_log(WLR_ERROR, "pango_parse_markup '%s' -> error %s", text,
|
||||
sway_log(SWAY_ERROR, "pango_parse_markup '%s' -> error %s", text,
|
||||
error->message);
|
||||
g_error_free(error);
|
||||
markup = false; // fallback to plain text
|
||||
|
|
@ -92,7 +92,7 @@ void get_text_size(cairo_t *cairo, const char *font, int *width, int *height,
|
|||
|
||||
char *buf = malloc(length);
|
||||
if (buf == NULL) {
|
||||
wlr_log(WLR_ERROR, "Failed to allocate memory");
|
||||
sway_log(SWAY_ERROR, "Failed to allocate memory");
|
||||
return;
|
||||
}
|
||||
va_start(args, fmt);
|
||||
|
|
@ -119,7 +119,7 @@ void pango_printf(cairo_t *cairo, const char *font,
|
|||
|
||||
char *buf = malloc(length);
|
||||
if (buf == NULL) {
|
||||
wlr_log(WLR_ERROR, "Failed to allocate memory");
|
||||
sway_log(SWAY_ERROR, "Failed to allocate memory");
|
||||
return;
|
||||
}
|
||||
va_start(args, fmt);
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ uint32_t parse_color(const char *color) {
|
|||
|
||||
int len = strlen(color);
|
||||
if (len != 6 && len != 8) {
|
||||
wlr_log(WLR_DEBUG, "Invalid color %s, defaulting to color 0xFFFFFFFF", color);
|
||||
sway_log(SWAY_DEBUG, "Invalid color %s, defaulting to color 0xFFFFFFFF", color);
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
uint32_t res = (uint32_t)strtoul(color, NULL, 16);
|
||||
|
|
@ -147,7 +147,7 @@ float parse_float(const char *value) {
|
|||
char *end;
|
||||
float flt = strtof(value, &end);
|
||||
if (*end || errno) {
|
||||
wlr_log(WLR_DEBUG, "Invalid float value '%s', defaulting to NAN", value);
|
||||
sway_log(SWAY_DEBUG, "Invalid float value '%s', defaulting to NAN", value);
|
||||
return NAN;
|
||||
}
|
||||
return flt;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue