util.c
author arg@mig29
Thu, 26 Oct 2006 12:13:41 +0200
changeset 541 08d3d329270a
parent 532 651f2c868b31
child 643 e90bf387bf6f
permissions -rw-r--r--
using MASTER 600 again, it is definately better, and using urxvtc for the moment (it doesn't flickers on refreshes, but this is not because of Marc Lehmann, it is because of the original rxvt code)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
532
651f2c868b31 code polishing, removed unnecessary newlines
Anselm R. Garbe <arg@10kloc.org>
parents: 471
diff changeset
     1
/* (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     2
 * See LICENSE file for license details.
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     3
 */
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
     4
#include "dwm.h"
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     5
#include <stdarg.h>
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     6
#include <stdio.h>
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     7
#include <stdlib.h>
5
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
     8
#include <sys/wait.h>
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
     9
#include <unistd.h>
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    10
84
052fe7498930 ordered variables in structs and source files alphabetically
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    11
/* extern */
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    12
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    13
void *
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 373
diff changeset
    14
emallocz(unsigned int size) {
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    15
	void *res = calloc(1, size);
123
61490330e90a cleaned up code
arg@10ksloc.org
parents: 92
diff changeset
    16
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    17
	if(!res)
325
58c09c533d3f removed badmalloc (thx for the pointer to Uriel)
Anselm R. Garbe <arg@10kloc.org>
parents: 317
diff changeset
    18
		eprint("fatal: could not malloc() %u bytes\n", size);
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    19
	return res;
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    20
}
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    21
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    22
void
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 373
diff changeset
    23
eprint(const char *errstr, ...) {
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    24
	va_list ap;
123
61490330e90a cleaned up code
arg@10ksloc.org
parents: 92
diff changeset
    25
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    26
	va_start(ap, errstr);
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    27
	vfprintf(stderr, errstr, ap);
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    28
	va_end(ap);
92
4bee0aa5b286 using EXIT_stuff in exit() now
Anselm R. Garbe <garbeam@wmii.de>
parents: 84
diff changeset
    29
	exit(EXIT_FAILURE);
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    30
}
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    31
270
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    32
void *
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 373
diff changeset
    33
erealloc(void *ptr, unsigned int size) {
270
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    34
	void *res = realloc(ptr, size);
532
651f2c868b31 code polishing, removed unnecessary newlines
Anselm R. Garbe <arg@10kloc.org>
parents: 471
diff changeset
    35
270
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    36
	if(!res)
325
58c09c533d3f removed badmalloc (thx for the pointer to Uriel)
Anselm R. Garbe <arg@10kloc.org>
parents: 317
diff changeset
    37
		eprint("fatal: could not malloc() %u bytes\n", size);
270
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    38
	return res;
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    39
}
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    40
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    41
void
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 373
diff changeset
    42
spawn(Arg *arg) {
189
523df4a3c1c4 using execl now, argv changed, using cmd and const char defs directly in the KEYS struct
arg@10ksloc.org
parents: 187
diff changeset
    43
	static char *shell = NULL;
123
61490330e90a cleaned up code
arg@10ksloc.org
parents: 92
diff changeset
    44
189
523df4a3c1c4 using execl now, argv changed, using cmd and const char defs directly in the KEYS struct
arg@10ksloc.org
parents: 187
diff changeset
    45
	if(!shell && !(shell = getenv("SHELL")))
523df4a3c1c4 using execl now, argv changed, using cmd and const char defs directly in the KEYS struct
arg@10ksloc.org
parents: 187
diff changeset
    46
		shell = "/bin/sh";
523df4a3c1c4 using execl now, argv changed, using cmd and const char defs directly in the KEYS struct
arg@10ksloc.org
parents: 187
diff changeset
    47
	if(!arg->cmd)
5
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    48
		return;
471
740c4bfc3124 reviewed util.c
arg@mmvi
parents: 461
diff changeset
    49
	/* The double-fork construct avoids zombie processes and keeps the code
740c4bfc3124 reviewed util.c
arg@mmvi
parents: 461
diff changeset
    50
	 * clean from stupid signal handlers. */
5
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    51
	if(fork() == 0) {
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    52
		if(fork() == 0) {
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    53
			if(dpy)
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    54
				close(ConnectionNumber(dpy));
9
d567f430a81d fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents: 6
diff changeset
    55
			setsid();
338
06438e022f9a eliminated sentinel warning
Anselm R. Garbe <arg@10kloc.org>
parents: 325
diff changeset
    56
			execl(shell, shell, "-c", arg->cmd, (char *)NULL);
217
7b63c375d28c applied grabbing-- and shell_minimal
arg@10ksloc.org
parents: 189
diff changeset
    57
			fprintf(stderr, "dwm: execl '%s -c %s'", shell, arg->cmd);
5
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    58
			perror(" failed");
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    59
		}
138
c1185dc7a36e some cleanups/fixes inspired by Jukka Salmi's feedback
arg@10ksloc.org
parents: 123
diff changeset
    60
		exit(0);
5
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    61
	}
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    62
	wait(0);
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    63
}