changeset: 2023:69a09368d28f
tag: tip
user: Kris Maglione <jg_AT_suckless.org>
date: Thu Mar 22 16:04:47 2007 -0400
summary: Cleanup in main.c. Fixed the bar setup in rc.wmii.
diff -r 50fe90adbad6 -r 69a09368d28f client.c
--- a/client.c Thu Mar 22 00:52:14 2007 -0400
+++ b/client.c Thu Mar 22 16:04:47 2007 -0400
@@ -136,7 +136,7 @@ manage_client(Client *c) {
XTextProperty tags = { 0 };
Client *trans;
- XGetTextProperty(blz.dpy, c->win, &tags, tags_atom);
+ XGetTextProperty(blz.dpy, c->win, &tags, atom[TagsAtom]);
if((trans = client_of_win(c->trans)))
strncpy(c->tags, trans->tags, sizeof(c->tags));
@@ -195,7 +195,7 @@ update_client_name(Client *c) {
name.nitems = 0;
c->name[0] = 0;
- XGetTextProperty(blz.dpy, c->win, &name, net_atom[NetWMName]);
+ XGetTextProperty(blz.dpy, c->win, &name, atom[NetWMName]);
if(!name.nitems)
XGetWMName(blz.dpy, c->win, &name);
if(!name.nitems)
@@ -248,8 +248,8 @@ set_client_state(Client * c, int state)
XChangeProperty(
/* display */ blz.dpy,
/* parent */ c->win,
- /* property */ wm_atom[WMState],
- /* type */ wm_atom[WMState],
+ /* property */ atom[WMState],
+ /* type */ atom[WMState],
/* format */ 32,
/* mode */ PropModeReplace,
/* data */ (uchar *) data,
@@ -355,7 +355,7 @@ void
void
kill_client(Client * c) {
if(c->proto & WM_PROTOCOL_DELWIN)
- send_client_message(c->win, wm_atom[WMProtocols], wm_atom[WMDelete]);
+ send_client_message(c->win, atom[WMProtocols], atom[WMDelete]);
else
XKillClient(blz.dpy, c->win);
}
@@ -409,9 +409,9 @@ prop_client(Client *c, Atom a) {
XWMHints *wmh;
long msize;
- if(a == wm_atom[WMProtocols])
+ if(a == atom[WMProtocols])
c->proto = win_proto(c->win);
- else if(a== net_atom[NetWMName]) {
+ else if(a== atom[NetWMName]) {
wmname:
update_client_name(c);
if(c->frame)
@@ -933,7 +933,7 @@ apply_tags(Client *c, const char *tags)
toks[n] = nil;
update_client_views(c, toks);
- XChangeProperty(blz.dpy, c->win, tags_atom, XA_STRING, 8,
+ XChangeProperty(blz.dpy, c->win, atom[TagsAtom], XA_STRING, 8,
PropModeReplace, (uchar *)c->tags, strlen(c->tags));
}
diff -r 50fe90adbad6 -r 69a09368d28f draw.c
--- a/draw.c Thu Mar 22 00:52:14 2007 -0400
+++ b/draw.c Thu Mar 22 16:04:47 2007 -0400
@@ -54,7 +54,7 @@ loadfont(Blitz *blitz, BlitzFont *font)
font->xfont = XLoadQueryFont(blitz->dpy, fontname);
if (!font->xfont) {
if(!strncmp(fontname, BLITZ_FONT, sizeof(BLITZ_FONT)))
- fatal("wmiiwm: error, cannot load '%s' font\n",
+ fatal("cannot load font: %s",
BLITZ_FONT);
free(font->fontstr);
font->fontstr = estrdup(BLITZ_FONT);
diff -r 50fe90adbad6 -r 69a09368d28f main.c
--- a/main.c Thu Mar 22 00:52:14 2007 -0400
+++ b/main.c Thu Mar 22 16:04:47 2007 -0400
@@ -19,10 +19,16 @@
#include <unistd.h>
#include "wmii.h"
+#define nelem(ary) (sizeof(ary) / sizeof(*ary))
+
+static const char
+ version[] = "wmiiwm - " VERSION ", ©2007 Kris Maglione\n";
+
+static int (*x_error_handler) (Display *, XErrorEvent *);
+static char *address, *ns_path;
static Bool check_other_wm;
-static int (*x_error_handler) (Display *, XErrorEvent *);
-static char version[] = "wmiiwm - " VERSION ", © 2007 Kris Maglione\n";
static struct sigaction sa;
+static struct passwd *passwd;
static int sleeperfd;
static void
@@ -59,55 +65,136 @@ scan_wins() {
XFree(wins);
}
-static int
-win_property(Window w, Atom a, Atom t, long l, uchar **prop) {
- Atom real;
- int format;
- ulong res, extra;
- int status;
-
- status = XGetWindowProperty(blz.dpy, w, a, 0L, l, False, t, &real, &format,
- &res, &extra, prop);
- if(status != Success || *prop == 0) {
- return 0;
- }
- if(res == 0) {
- free((void *) *prop);
- }
- return res;
-}
-
int
win_proto(Window w) {
Atom *protocols;
- long res;
- int protos = 0;
- int i;
-
- res = win_property(w, wm_atom[WMProtocols], XA_ATOM, 20L,
- ((uchar **) &protocols));
- if(res <= 0) {
- return protos;
- }
- for(i = 0; i < res; i++) {
- if(protocols[i] == wm_atom[WMDelete])
+ Atom real;
+ ulong nitems, extra;
+ int i, format, status, protos;
+
+ status = XGetWindowProperty(
+ /* display */ blz.dpy,
+ /* window */ w,
+ /* property */ atom[WMProtocols],
+ /* offset */ 0L,
+ /* length */ 20L,
+ /* delete */ False,
+ /* req_type */ XA_ATOM,
+ /* type_ret */ &real,
+ /* format_ret */&format,
+ /* nitems_ret */&nitems,
+ /* extra_bytes */&extra,
+ /* prop_return */(uchar**)&protocols
+ );
+
+ if(status != Success || protocols == 0) {
+ return 0;
+ }
+
+ if(nitems == 0) {
+ free(protocols);
+ return 0;
+ }
+
+ protos = 0;
+ for(i = 0; i < nitems; i++) {
+ if(protocols[i] == atom[WMDelete])
protos |= WM_PROTOCOL_DELWIN;
}
- free((char *) protocols);
+
+ free(protocols);
return protos;
}
+static void
+init_ns() {
+ struct stat st;
+ char *p, *q, *display;
+ int ret;
+
+ if(address && strncmp(address, "unix!", 5) == 0) {
+ ns_path = estrdup(&address[5]);
+
+ p = strrchr(ns_path, '/');
+ if(p != nil)
+ p = '\0';
+ }else if((p = getenv("WMII_NS_PATH")) || (p = getenv("NAMESPACE")))
+ ns_path = p;
+ else {
+ display = getenv("DISPLAY");
+ if(display == nil)
+ fatal("DISPLAY is unset");
+
+ display = estrdup(display);
+ p = &display[strlen(display) - 2];
+ if(strcmp(p, ".0") == 0)
+ *p = '\0';
+
+ ns_path = emalloc(strlen(display) + strlen(user) + strlen("/tmp/ns..") + 1);
+ sprintf(ns_path, "/tmp/ns.%s.%s", user, display);
+ }
+
+ if(ns_path[0] != '/' || strlen(ns_path) == 0)
+ fatal("Bad ns_path");
+
+ q = ns_path + strlen(ns_path);
+ for(p = &ns_path[1]; p < q; p++) {
+ if(*p == '/') {
+ *p = '\0';
+ ret = mkdir(ns_path, 0700);
+ if(ret == -1 && errno != EEXIST)
+ fatal("Can't create ns_path '%s':", ns_path);
+ *p = '/';
+ }
+ }
+
+ if(stat(ns_path, &st))
+ fatal("Can't stat ns_path '%s':", ns_path);
+ if(getuid() != st.st_uid)
+ fatal("ns_path '%s' exists but is not owned by you",
+ ns_path);
+ if(st.st_mode & 077)
+ fatal("ns_path '%s' exists, but has group or world permissions",
+ ns_path);
+}
+
+static void
+init_environment() {
+ if(address == nil)
+ address = getenv("WMII_ADDRESS");
+
+ init_ns();
+
+ if(address == nil) {
+ address = emalloc(strlen(ns_path) + strlen("unix!/wmii") + 1);
+ sprintf(address, "unix!%s/wmii", ns_path);
+ }
+
+ setenv("WMII_NS_DIR", ns_path, True);
+ setenv("WMII_ADDRESS", address, True);
+}
+
+static void
+intern_atom(int ident, char *name) {
+ atom[ident] = XInternAtom(blz.dpy, name, False);
+}
static void
init_atoms() {
- wm_atom[WMState] = XInternAtom(blz.dpy, "WM_STATE", False);
- wm_atom[WMProtocols] = XInternAtom(blz.dpy, "WM_PROTOCOLS", False);
- wm_atom[WMDelete] = XInternAtom(blz.dpy, "WM_DELETE_WINDOW", False);
- net_atom[NetSupported] = XInternAtom(blz.dpy, "_NET_SUPPORTED", False);
- net_atom[NetWMName] = XInternAtom(blz.dpy, "_NET_WM_NAME", False);
- tags_atom = XInternAtom(blz.dpy, "_WIN_TAGS", False);
- XChangeProperty(blz.dpy, blz.root, net_atom[NetSupported], XA_ATOM, 32,
- PropModeReplace, (uchar *) net_atom, NetLast);
+ intern_atom(WMState, "WM_STATE");
+ intern_atom(WMProtocols, "WM_PROTOCOLS");
+ intern_atom(WMDelete, "WM_DELETE_WINDOW");
+ intern_atom(NetSupported, "_NET_SUPPORTED");
+ intern_atom(NetWMName, "_NET_WM_NAME");
+ intern_atom(TagsAtom, "_WIN_TAGS");
+
+ XChangeProperty(blz.dpy, blz.root, atom[NetSupported], XA_ATOM, 32,
+ PropModeReplace, (uchar *)&atom[NetSupported], 2);
+}
+
+static void
+create_cursor(int ident, uint shape) {
+ cursor[ident] = XCreateFontCursor(blz.dpy, shape);
}
static void
@@ -115,17 +202,24 @@ init_cursors() {
Pixmap pix;
XColor black, dummy;
- XAllocNamedColor(blz.dpy, DefaultColormap(blz.dpy, blz.screen), "black", &black, &dummy);
- pix = XCreateBitmapFromData(blz.dpy, blz.root, (char[]){0}, 1, 1);
-
- cursor[CurNormal] = XCreateFontCursor(blz.dpy, XC_left_ptr);
- cursor[CurNECorner] = XCreateFontCursor(blz.dpy, XC_top_right_corner);
- cursor[CurNWCorner] = XCreateFontCursor(blz.dpy, XC_top_left_corner);
- cursor[CurSECorner] = XCreateFontCursor(blz.dpy, XC_bottom_right_corner);
- cursor[CurSWCorner] = XCreateFontCursor(blz.dpy, XC_bottom_left_corner);
- cursor[CurMove] = XCreateFontCursor(blz.dpy, XC_fleur);
- cursor[CurInput] = XCreateFontCursor(blz.dpy, XC_xterm);
- cursor[CurInvisible] = XCreatePixmapCursor(blz.dpy, pix, pix, &black, &black, 0, 0);
+ create_cursor(CurNormal, XC_left_ptr);
+ create_cursor(CurNECorner, XC_top_right_corner);
+ create_cursor(CurNWCorner, XC_top_left_corner);
+ create_cursor(CurSECorner, XC_bottom_right_corner);
+ create_cursor(CurSWCorner, XC_bottom_left_corner);
+ create_cursor(CurMove, XC_fleur);
+ create_cursor(CurInput, XC_xterm);
+
+ XAllocNamedColor(blz.dpy, DefaultColormap(blz.dpy, blz.screen),
+ "black", &black,
+ &dummy);
+ pix = XCreateBitmapFromData(blz.dpy, blz.root,
+ (char[]){0}, 1, 1);
+
+ cursor[CurInvisible] = XCreatePixmapCursor(blz.dpy,
+ pix, pix,
+ &black, &black,
+ 0, 0);
XFreePixmap(blz.dpy, pix);
}
@@ -142,13 +236,23 @@ init_screen(WMScreen *screen) {
gcv.foreground = def.normcolor.bg;
gcv.plane_mask = AllPlanes;
gcv.graphics_exposures = False;
- xorgc = XCreateGC(blz.dpy, blz.root, GCForeground | GCGraphicsExposures |
- GCFunction | GCSubwindowMode | GCPlaneMask, &gcv);
+ xorgc = XCreateGC(blz.dpy, blz.root,
+ GCForeground
+ | GCGraphicsExposures
+ | GCFunction
+ | GCSubwindowMode
+ | GCPlaneMask,
+ &gcv);
+
screen->rect.x = screen->rect.y = 0;
screen->rect.width = DisplayWidth(blz.dpy, blz.screen);
screen->rect.height = DisplayHeight(blz.dpy, blz.screen);
def.snap = screen->rect.height / 63;
- sel_screen = XQueryPointer(blz.dpy, blz.root, &w, &w, &ret, &ret, &ret, &ret, &mask);
+
+ sel_screen = XQueryPointer(blz.dpy, blz.root,
+ &w, &w,
+ &ret, &ret, &ret, &ret,
+ &mask);
}
/*
@@ -160,21 +264,23 @@ int
int
wmii_error_handler(Display *dpy, XErrorEvent *error) {
if(check_other_wm)
- fatal("wmiiwm: another window manager is already running\n");
+ fatal("another window manager is already running");
+
if(error->error_code == BadWindow
- || (error->request_code == X_SetInputFocus
- && error->error_code == BadMatch)
- || (error->request_code == X_PolyText8
- && error->error_code == BadDrawable)
- || (error->request_code == X_PolyFillRectangle
- && error->error_code == BadDrawable)
- || (error->request_code == X_PolySegment
- && error->error_code == BadDrawable)
- || (error->request_code == X_ConfigureWindow
- && error->error_code == BadMatch)
- || (error->request_code == X_GrabKey
- && error->error_code == BadAccess))
+ ||(error->request_code == X_SetInputFocus
+ && error->error_code == BadMatch)
+ ||(error->request_code == X_PolyText8
+ && error->error_code == BadDrawable)
+ ||(error->request_code == X_PolyFillRectangle
+ && error->error_code == BadDrawable)
+ ||(error->request_code == X_PolySegment
+ && error->error_code == BadDrawable)
+ ||(error->request_code == X_ConfigureWindow
+ && error->error_code == BadMatch)
+ ||(error->request_code == X_GrabKey
+ && error->error_code == BadAccess))
return 0;
+
fprintf(stderr, "wmiiwm: fatal error: Xrequest code=%d, Xerror code=%d\n",
error->request_code, error->error_code);
return x_error_handler(blz.dpy, error); /* calls exit() */
@@ -193,6 +299,7 @@ cleanup_handler(int signal) {
cleanup_handler(int signal) {
sa.sa_handler = SIG_DFL;
sigaction(signal, &sa, nil);
+
switch(signal) {
case SIGINT:
srv.running = False;
@@ -211,33 +318,41 @@ init_traps() {
int fd[2];
if(pipe(fd) != 0)
- fatal("Can't pipe(): %s\n", strerror(errno));
+ fatal("Can't pipe():");
switch(fork()) {
case -1:
- fatal("Can't fork(): %s\n", strerror(errno));
- default:
- close(fd[0]);
- sleeperfd = fd[1];
- sa.sa_flags = 0;
- sa.sa_handler = cleanup_handler;
- sigaction(SIGINT, &sa, nil);
- sigaction(SIGTERM, &sa, nil);
- sigaction(SIGQUIT, &sa, nil);
- sigaction(SIGHUP, &sa, nil);
- break;
+ fatal("Can't fork():");
+ break; /* not reached */
case 0:
close(fd[1]);
close(ConnectionNumber(blz.dpy));
setsid();
+
blz.dpy = XOpenDisplay(0);
if(!blz.dpy)
- fatal("wmiiwm: cannot open display\n");
+ fatal("Can't open display");
+
+ /* Wait for parent to exit */
read(fd[0], buf, 1);
+
+ /* Reset input focus */
XSetInputFocus(blz.dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
XCloseDisplay(blz.dpy);
exit(0);
- }
+ default:
+ break;
+ }
+
+ close(fd[0]);
+ sleeperfd = fd[1];
+
+ sa.sa_flags = 0;
+ sa.sa_handler = cleanup_handler;
+ sigaction(SIGINT, &sa, nil);
+ sigaction(SIGTERM, &sa, nil);
+ sigaction(SIGQUIT, &sa, nil);
+ sigaction(SIGHUP, &sa, nil);
}
void
@@ -248,9 +363,7 @@ check_9pcon(IXPConn *c) {
int
main(int argc, char *argv[]) {
- char *wmiirc, *errstr, *tmp, *display;
- char address[1024], ns_path[1024];
- struct passwd *passwd;
+ char *wmiirc, *errstr, *p;
WMScreen *s;
int sock, i;
pid_t pid;
@@ -259,12 +372,6 @@ main(int argc, char *argv[]) {
passwd = getpwuid(getuid());
user = estrdup(passwd->pw_name);
wmiirc = "wmiistartrc";
- address[0] = '\0';
-
- display = strdup(getenv("DISPLAY"));
- if((tmp = strstr(display, ".0")) == display + strlen(display) - 2)
- *tmp = '\0';
-
/* command line args */
for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) {
@@ -277,14 +384,18 @@ main(int argc, char *argv[]) {
verbose = True;
break;
case 'a':
- if(i + 1 < argc)
- strncpy(address, argv[++i], sizeof(address));
+ if(argv[i][2] != '\0')
+ address = &argv[i][2];
+ else if(++i < argc)
+ address = argv[i];
else
usage();
break;
case 'r':
- if(i + 1 < argc)
- wmiirc = argv[++i];
+ if(argv[i][2] != '\0')
+ wmiirc = &argv[i][2];
+ else if(++i < argc)
+ wmiirc = argv[i];
else
usage();
break;
@@ -294,35 +405,12 @@ main(int argc, char *argv[]) {
}
}
-
- if((strlen(address) == 0)
- && (tmp = getenv("WMII_ADDRESS")) && strlen(tmp) > 0)
- strncpy(address, tmp, sizeof(address));
-
- if(strncmp(address, "unix!", 5) == 0) {
- tmp = &address[5];
- i = strrchr(tmp, '/') - tmp;
- if(i < 0)
- fatal("wmiiwm: Bad address\n");
- strncpy(ns_path, tmp, min(sizeof(ns_path), i));
- }
- else if((tmp = getenv("WMII_NS_DIR")) && strlen(tmp) > 0)
- strncpy(ns_path, tmp, sizeof(ns_path));
- else
- snprintf(ns_path, sizeof(ns_path), "/tmp/ns.%s.%s", user, display);
-
- if(strlen(address) == 0)
- snprintf(address, sizeof(address), "unix!%s/wmii", ns_path);
-
- setenv("WMII_NS_DIR", ns_path, True);
- setenv("WMII_ADDRESS", address, True);
-
setlocale(LC_CTYPE, "");
starting = True;
blz.dpy = XOpenDisplay(0);
if(!blz.dpy)
- fatal("wmiiwm: cannot open dpy\n");
+ fatal("Can't open display");
blz.screen = DefaultScreen(blz.dpy);
blz.root = RootWindow(blz.dpy, blz.screen);
@@ -332,76 +420,43 @@ main(int argc, char *argv[]) {
XSync(blz.dpy, False);
check_other_wm = False;
+ init_environment();
init_traps();
-
- /* Make sure that the namespace directory exists */
- switch(pid = fork()) {
- case -1:
- fatal("wmiiwm: Can't fork: %s\n", strerror(errno));
- break; /* Not reached */
- case 0:
- execlp("mkdir", "mkdir", "-m", "0700", "-p", ns_path, nil);
- fatal("wmiiwm: Can't exec mkdir: %s\n", strerror(errno));
- break; /* Not reached */
- default:
- if(waitpid(pid, &i, WUNTRACED) == -1)
- fprintf(stderr, "wmiiwm: warning: wait for mkdir returned -1: %s\n",
- strerror(errno));
- else if(WEXITSTATUS(i) != 0)
- fatal("wmiiwm: Can't create namespace dir \"%s\" (mkdir returned %d)\n",
- ns_path, i);
- break;
- }
-
- /* Check namespace permissions */
- if(!strncmp(address, "unix!", 5)) {
- struct stat st;
-
- if(stat(ns_path, &st))
- fatal("wmiiwm: can't stat ns_path directory \"%s\": %s\n",
- ns_path, strerror(errno));
- if(getuid() != st.st_uid)
- fatal("wmiiwm: ns_path directory \"%s\" exists, "
- "but is not owned by you",
- ns_path);
- if(st.st_mode & 077)
- fatal("wmiiwm: ns_path directory \"%s\" exists, "
- "but has group or world permissions",
- ns_path);
- }
errstr = nil;
sock = ixp_create_sock(address, &errstr);
if(sock < 0)
- fatal("wmiiwm: fatal: %s (%s)\n", errstr, address);
+ fatal("Can't create socket '%s': %s", address, errstr);
/* start wmiirc */
if(wmiirc) {
+ char *shell;
+
/* Double fork hack */
switch(pid = fork()) {
case -1:
- perror("wmiiwm: cannot fork wmiirc");
+ fatal("Can't fork wmiirc");
break; /* Not reached */
case 0:
switch(fork()) {
case -1:
- perror("wmiiwm: cannot fork wmiirc");
+ fatal("Can't fork wmiirc");
break; /* Not reached */
case 0:
if(setsid() == -1)
- fatal("wmiiwm: can't setsid: %s\n", strerror(errno));
+ fatal("Can't setsid:");
close(sock);
close(ConnectionNumber(blz.dpy));
+ shell = passwd->pw_shell;
+ if(shell[0] != '/')
+ fatal("Shell is not an absolute path: %s", shell);
/* Run through the user's shell as a login shell */
- tmp = malloc(sizeof(char*) * (strlen(passwd->pw_shell) + 2));
- if(passwd->pw_shell[0] == '/')
- sprintf(tmp, "-%s", strrchr(passwd->pw_shell, '/') + 1); /* Can't overflow */
- else
- fatal("wmiiwm: shell is not an absolute path: %s\n", passwd->pw_shell);
-
- execl(passwd->pw_shell, tmp, "-c", wmiirc, nil);
- fatal("wmiiwm: can't exec \"%s\": %s\n", wmiirc, strerror(errno));
+ p = malloc(sizeof(char*) * (strlen(shell) + 2));
+ sprintf(p, "-%s", strrchr(shell, '/') + 1);
+
+ execl(shell, p, "-c", wmiirc, nil);
+ fatal("Can't exec '%s':", wmiirc);
break; /* Not reached */
default:
exit(0);
@@ -514,15 +569,16 @@ main(int argc, char *argv[]) {
check_x_event(nil);
errstr = ixp_server_loop(&srv);
if(errstr)
- fprintf(stderr, "wmiiwm: fatal: %s\n", errstr);
cleanup();
XCloseDisplay(blz.dpy);
ixp_server_close(&srv);
close(sleeperfd);
+
if(execstr)
execl("/bin/sh", "sh", "-c", execstr, nil);
+
if(errstr)
- return 1;
+ fatal("%s", errstr);
return 0;
}
diff -r 50fe90adbad6 -r 69a09368d28f rc/rc.wmii
--- a/rc/rc.wmii Thu Mar 22 00:52:14 2007 -0400
+++ b/rc/rc.wmii Thu Mar 22 16:04:47 2007 -0400
@@ -211,7 +211,7 @@ proglist $PATH >$progs_file &
# Tag Bar Setup
ifs='#
-'{ for(bar in `{comm -1 <{wmiir ls /lbar} <{read_tags}})
+'{ for(bar in `{comm -23 <{wmiir ls /lbar} <{read_tags}})
wmiir remove /lbar/$bar
seltag=`{wmiir read /tag/sel/ctl}
for(tag in `{read_tags}) {
diff -r 50fe90adbad6 -r 69a09368d28f util.c
--- a/util.c Thu Mar 22 00:52:14 2007 -0400
+++ b/util.c Thu Mar 22 16:04:47 2007 -0400
@@ -1,5 +1,6 @@
/* Written by Kris Maglione <fbsdaemon at gmail dot com> */
/* Public domain */
+#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -9,10 +10,19 @@ void
void
fatal(const char *fmt, ...) {
va_list ap;
+ int err;
+
+ err = errno;
+ fprintf(stderr, "wmiiwm: fatal: ");
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
+
+ if(fmt[strlen(fmt)-1] == ':')
+ fprintf(stderr, " %s\n", strerror(err));
+ else
+ fprintf(stderr, "\n");
exit(1);
}
@@ -21,7 +31,7 @@ emalloc(uint size) {
emalloc(uint size) {
void *ret = malloc(size);
if(!ret)
- fatal("fatal: could not malloc() %d bytes\n", size);
+ fatal("could not malloc() %d bytes", size);
return ret;
}
@@ -36,7 +46,7 @@ erealloc(void *ptr, uint size) {
erealloc(void *ptr, uint size) {
void *ret = realloc(ptr, size);
if(!ret)
- fatal("fatal: could not realloc() %d bytes\n", size);
+ fatal("fatal: could not realloc() %d bytes", size);
return ret;
}
@@ -44,7 +54,7 @@ estrdup(const char *str) {
estrdup(const char *str) {
void *ret = strdup(str);
if(!ret)
- fatal("fatal: could not strdup() %u bytes\n", strlen(str));
+ fatal("fatal: could not strdup() %u bytes", strlen(str));
return ret;
}
diff -r 50fe90adbad6 -r 69a09368d28f wmii.h
--- a/wmii.h Thu Mar 22 00:52:14 2007 -0400
+++ b/wmii.h Thu Mar 22 16:04:47 2007 -0400
@@ -88,11 +88,16 @@ struct BlitzBrush {
XRectangle rect; /* relative rect */
};
-/* WM atoms */
-enum { WMState, WMProtocols, WMDelete, WMLast };
-
-/* NET atoms */
-enum { NetSupported, NetWMName, NetLast };
+enum {
+/* WM atom */
+ WMState, WMProtocols, WMDelete,
+/* NET atom */
+ NetSupported, NetWMName,
+/* Other */
+ TagsAtom,
+/* Last atom */
+ AtomLast
+};
/* Column modes */
enum { Coldefault, Colstack, Colmax };
@@ -256,9 +261,7 @@ Blitz blz;
Blitz blz;
GC xorgc;
char *user;
-Atom wm_atom[WMLast];
-Atom net_atom[NetLast];
-Atom tags_atom;
+Atom atom[AtomLast];
Cursor cursor[CurLast];
uint valid_mask;
uint num_lock_mask;
Received on Thu Mar 22 2007 - 21:08:46 UTC
This archive was generated by hypermail 2.2.0 : Sun Jul 13 2008 - 15:56:21 UTC