polytreewm/src/main.c

118 lines
2.0 KiB
C
Raw Normal View History

2021-11-21 01:49:30 +00:00
#include "main.h"
2021-11-21 01:29:09 +00:00
#include "dwm.h"
2021-11-21 02:03:19 +00:00
#include <locale.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
2021-11-21 02:38:12 +00:00
#define PROGRAM_NAME "polytreewm"
2021-11-21 02:25:19 +00:00
static void logger(const char *level, const char *fmt, ...);
static void logger_perror(const char *level, const char *fmt, ...);
2021-11-21 01:29:09 +00:00
int main(int argc, char *argv[])
{
if (argc == 2 && strcmp(argv[1], "-v") == 0) {
2021-11-21 02:38:12 +00:00
fputs(PROGRAM_NAME"-"VERSION"\n", stderr);
2021-11-21 01:52:24 +00:00
exit(EXIT_SUCCESS);
}
if (argc != 1) {
2021-11-21 02:38:12 +00:00
fputs("usage: "PROGRAM_NAME" [-v]\n", stderr);
2021-11-21 02:25:19 +00:00
exit(EXIT_FAILURE);
}
2021-11-21 02:03:19 +00:00
if (!setlocale(LC_CTYPE, "") || !dwm_has_locale_support()) {
warning("no locale support");
}
#ifdef __OpenBSD__
if (pledge("stdio rpath proc exec", NULL) == -1) {
fatal("pledge");
}
#endif // __OpenBSD__
2021-11-21 02:38:12 +00:00
exit(dwm_main(argc, argv));
2021-11-21 01:29:09 +00:00
}
2021-11-21 02:25:19 +00:00
void logger(const char *const level, const char *const fmt, ...)
{
2021-11-21 02:38:12 +00:00
fprintf(stderr, PROGRAM_NAME": %s: ", level);
2021-11-21 02:25:19 +00:00
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
2021-11-21 01:49:30 +00:00
fputc('\n', stderr);
}
2021-11-21 01:49:30 +00:00
2021-11-21 02:25:19 +00:00
void logger_perror(const char *const level, const char *const fmt, ...)
2021-11-21 01:49:30 +00:00
{
2021-11-21 02:38:12 +00:00
fprintf(stderr, PROGRAM_NAME": %s: ", level);
2021-11-21 02:25:19 +00:00
2021-11-21 01:49:30 +00:00
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
fprintf(stderr, ": ");
perror(NULL);
2021-11-21 02:25:19 +00:00
}
void fatal(const char *const fmt, ...)
{
va_list ap;
va_start(ap, fmt);
logger("ERROR", fmt, ap);
va_end(ap);
2021-11-21 01:49:30 +00:00
exit(EXIT_FAILURE);
}
2021-11-21 02:03:19 +00:00
2021-11-21 02:25:19 +00:00
void fatal_perror(const char* const fmt, ...)
2021-11-21 02:03:19 +00:00
{
2021-11-21 02:25:19 +00:00
va_list ap;
va_start(ap, fmt);
logger_perror("ERROR", fmt, ap);
va_end(ap);
2021-11-21 02:03:19 +00:00
2021-11-21 02:25:19 +00:00
exit(EXIT_FAILURE);
}
void fatal_nodie(const char *const fmt, ...)
{
2021-11-21 02:03:19 +00:00
va_list ap;
va_start(ap, fmt);
2021-11-21 02:25:19 +00:00
logger("ERROR", fmt, ap);
2021-11-21 02:03:19 +00:00
va_end(ap);
2021-11-21 02:25:19 +00:00
}
2021-11-21 02:03:19 +00:00
2021-11-21 02:25:19 +00:00
void fatal_perror_nodie(const char *const fmt, ...)
{
va_list ap;
va_start(ap, fmt);
logger_perror("ERROR", fmt, ap);
va_end(ap);
}
void warning(const char *const fmt, ...)
{
va_list ap;
va_start(ap, fmt);
logger("WARN", fmt, ap);
va_end(ap);
}
void warning_perror(const char *const fmt, ...)
{
va_list ap;
va_start(ap, fmt);
logger_perror("WARN", fmt, ap);
va_end(ap);
2021-11-21 02:03:19 +00:00
}