Improve dying and logging
This commit is contained in:
parent
bc7eff3c4f
commit
256a49ee6c
|
@ -132,7 +132,7 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
|
|||
return NULL;
|
||||
}
|
||||
} else {
|
||||
die("no font specified.");
|
||||
fatal("no font specified.");
|
||||
}
|
||||
|
||||
/* Do not allow using color fonts. This is a workaround for a BadLength
|
||||
|
@ -204,7 +204,7 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
|
|||
if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
|
||||
DefaultColormap(drw->dpy, drw->screen),
|
||||
clrname, dest))
|
||||
die("error, cannot allocate color '%s'", clrname);
|
||||
fatal("error, cannot allocate color '%s'", clrname);
|
||||
}
|
||||
|
||||
/* Wrapper to create color schemes. The caller has to call free(3) on the
|
||||
|
@ -347,7 +347,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
|
|||
|
||||
if (!drw->fonts->pattern) {
|
||||
/* Refer to the comment in xfont_create for more information. */
|
||||
die("the first font in the cache must be loaded from a font string.");
|
||||
fatal("the first font in the cache must be loaded from a font string.");
|
||||
}
|
||||
|
||||
fcpattern = FcPatternDuplicate(drw->fonts->pattern);
|
||||
|
|
12
src/dwm.c
12
src/dwm.c
|
@ -282,18 +282,18 @@ static void (*handler[LASTEvent])(XEvent*) = {
|
|||
int dwm_main()
|
||||
{
|
||||
if (!(dpy = XOpenDisplay(NULL))) {
|
||||
die("polytreewm: cannot open display");
|
||||
fatal("cannot open display");
|
||||
}
|
||||
|
||||
checkotherwm();
|
||||
|
||||
if (!setup()) {
|
||||
die("polytreewm: cannot setup");
|
||||
fatal("cannot setup");
|
||||
}
|
||||
|
||||
#ifdef __OpenBSD__
|
||||
if (pledge("stdio rpath proc exec", NULL) == -1) {
|
||||
die("pledge");
|
||||
fatal("pledge");
|
||||
}
|
||||
#endif /* __OpenBSD__ */
|
||||
|
||||
|
@ -1641,11 +1641,11 @@ bool setup()
|
|||
root = RootWindow(dpy, screen.x_screen);
|
||||
drw = drw_create(dpy, screen.x_screen, root, screen.sizes.w, screen.sizes.h);
|
||||
if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
|
||||
die("no fonts could be loaded.");
|
||||
fatal("no fonts could be loaded.");
|
||||
updategeom();
|
||||
/* init atoms */
|
||||
atoms = atoms_create(dpy);
|
||||
if (atoms == NULL) die("polytreewm: fatal: cannot allocate atoms");
|
||||
if (atoms == NULL) fatal("cannot allocate atoms");
|
||||
/* init cursors */
|
||||
cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
|
||||
cursor[CurResize] = drw_cur_create(drw, XC_sizing);
|
||||
|
@ -1760,7 +1760,7 @@ void showhide(Client *c)
|
|||
void sigchld(__attribute__((unused)) int unused)
|
||||
{
|
||||
if (signal(SIGCHLD, sigchld) == SIG_ERR)
|
||||
die("can't install SIGCHLD handler:");
|
||||
fatal_perror("can't install SIGCHLD handler");
|
||||
while (0 < waitpid(-1, NULL, WNOHANG));
|
||||
}
|
||||
|
||||
|
|
|
@ -19,9 +19,8 @@ int xerror(Display *const dpy, XErrorEvent *const ee)
|
|||
return 0;
|
||||
}
|
||||
|
||||
fprintf(
|
||||
stderr,
|
||||
"polytreewm: fatal error: request code=%d, error code=%d\n",
|
||||
fatal_nodie(
|
||||
"request code=%d, error code=%d\n",
|
||||
ee->request_code,
|
||||
ee->error_code
|
||||
);
|
||||
|
@ -42,7 +41,7 @@ int xerrorstart(
|
|||
__attribute__((unused)) Display *const dpy,
|
||||
__attribute__((unused)) XErrorEvent *const ee
|
||||
) {
|
||||
die("polytreewm: another window manager is already running");
|
||||
fatal("another window manager is already running");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
64
src/main.c
64
src/main.c
|
@ -8,6 +8,9 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
static void logger(const char *level, const char *fmt, ...);
|
||||
static void logger_perror(const char *level, const char *fmt, ...);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (argc == 2 && strcmp(argv[1], "-v") == 0) {
|
||||
|
@ -16,7 +19,8 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
if (argc != 1) {
|
||||
die("usage: polytreewm [-v]");
|
||||
fprintf(stderr, "usage: polytreewm [-v]\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (!setlocale(LC_CTYPE, "") || !dwm_has_locale_support()) {
|
||||
|
@ -26,20 +30,22 @@ int main(int argc, char *argv[])
|
|||
return dwm_main(argc, argv);
|
||||
}
|
||||
|
||||
void die(const char *const fmt, ...)
|
||||
void logger(const char *const level, const char *const fmt, ...)
|
||||
{
|
||||
fprintf(stderr, "%s: ", level);
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
vfprintf(stderr, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
fputc('\n', stderr);
|
||||
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
void die_perror(const char *const fmt, ...)
|
||||
void logger_perror(const char *const level, const char *const fmt, ...)
|
||||
{
|
||||
fprintf(stderr, "%s: ", level);
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
vfprintf(stderr, fmt, ap);
|
||||
|
@ -47,18 +53,56 @@ void die_perror(const char *const fmt, ...)
|
|||
|
||||
fprintf(stderr, ": ");
|
||||
perror(NULL);
|
||||
}
|
||||
|
||||
void fatal(const char *const fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
logger("ERROR", fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
void warning(const char *const fmt, ...)
|
||||
void fatal_perror(const char* const fmt, ...)
|
||||
{
|
||||
fputs("WARN: ", stderr);
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
vfprintf(stderr, fmt, ap);
|
||||
logger_perror("ERROR", fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
fputc('\n', stderr);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
void fatal_nodie(const char *const fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
logger("ERROR", fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,13 @@
|
|||
#ifndef _MAIN_H
|
||||
#define _MAIN_H
|
||||
|
||||
void die(const char *fmt, ...);
|
||||
void die_perror(const char *fmt, ...);
|
||||
__attribute__((noreturn))
|
||||
void fatal(const char *fmt, ...);
|
||||
__attribute__((noreturn))
|
||||
void fatal_perror(const char *fmt, ...);
|
||||
void fatal_nodie(const char *fmt, ...);
|
||||
void fatal_perror_nodie(const char *fmt, ...);
|
||||
void warning(const char *fmt, ...);
|
||||
void warning_perror(const char *fmt, ...);
|
||||
|
||||
#endif // _MAIN_H
|
||||
|
|
|
@ -10,6 +10,6 @@
|
|||
void *ecalloc(size_t nmemb, size_t size)
|
||||
{
|
||||
void *p = calloc(nmemb, size);
|
||||
if (!p) die_perror("calloc");
|
||||
if (!p) fatal_perror("calloc");
|
||||
return p;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue