diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-04-25 11:03:40 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-04-25 11:03:40 -0400 |
commit | 34e4a47a8675ad2183fb34b0f93699a5a3c21258 (patch) | |
tree | a05f189144d2758cc44d70bbea79fbe136c9bc48 /log.c | |
parent | 3ee910d46840771bf32bfd8776ff8bb25853d216 (diff) | |
download | swaybg-34e4a47a8675ad2183fb34b0f93699a5a3c21258.tar.gz swaybg-34e4a47a8675ad2183fb34b0f93699a5a3c21258.tar.bz2 |
Split swaybg into a standalone project
Diffstat (limited to '')
-rw-r--r-- | log.c | 68 |
1 files changed, 68 insertions, 0 deletions
@@ -0,0 +1,68 @@ +#define _POSIX_C_SOURCE 199506L +#include <errno.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> +#include "log.h" + +static enum log_importance log_importance = LOG_ERROR; + +static const char *verbosity_colors[] = { + [LOG_SILENT] = "", + [LOG_ERROR ] = "\x1B[1;31m", + [LOG_INFO ] = "\x1B[1;34m", + [LOG_DEBUG ] = "\x1B[1;30m", +}; + +void swaybg_log_init(enum log_importance verbosity) { + if (verbosity < LOG_IMPORTANCE_LAST) { + log_importance = verbosity; + } +} + +void _swaybg_log(enum log_importance verbosity, const char *fmt, ...) { + if (verbosity > log_importance) { + return; + } + + va_list args; + va_start(args, fmt); + + // 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 < LOG_IMPORTANCE_LAST) + ? verbosity : LOG_IMPORTANCE_LAST - 1; + + if (isatty(STDERR_FILENO)) { + fprintf(stderr, "%s", verbosity_colors[c]); + } + + vfprintf(stderr, fmt, args); + + if (isatty(STDERR_FILENO)) { + fprintf(stderr, "\x1B[0m"); + } + fprintf(stderr, "\n"); + + va_end(args); +} + +const char *_swaybg_strip_path(const char *filepath) { + if (*filepath == '.') { + while (*filepath == '.' || *filepath == '/') { + ++filepath; + } + } + return filepath; +} |