util.c
author Anselm R.Garbe <arg@10ksloc.org>
Mon, 14 Aug 2006 10:18:24 +0200
changeset 270 dacd3f3c5823
parent 217 7b63c375d28c
child 317 45af6a8a0cbf
permissions -rw-r--r--
implemented restack behavior (floats are on top in tiled mode)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     1
/*
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     2
 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     3
 * See LICENSE file for license details.
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     4
 */
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
     5
#include "dwm.h"
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     6
#include <stdarg.h>
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     7
#include <stdio.h>
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     8
#include <stdlib.h>
5
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
     9
#include <sys/wait.h>
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    10
#include <unistd.h>
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    11
84
052fe7498930 ordered variables in structs and source files alphabetically
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    12
/* static */
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    13
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    14
static void
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    15
bad_malloc(unsigned int size)
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    16
{
138
c1185dc7a36e some cleanups/fixes inspired by Jukka Salmi's feedback
arg@10ksloc.org
parents: 123
diff changeset
    17
	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
    18
}
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    19
84
052fe7498930 ordered variables in structs and source files alphabetically
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    20
/* extern */
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    21
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    22
void *
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    23
emallocz(unsigned int size)
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    24
{
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    25
	void *res = calloc(1, size);
123
61490330e90a cleaned up code
arg@10ksloc.org
parents: 92
diff changeset
    26
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    27
	if(!res)
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    28
		bad_malloc(size);
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    29
	return res;
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    30
}
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    31
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    32
void
187
41f8ee33771e small stylistic fix
arg@10ksloc.org
parents: 164
diff changeset
    33
eprint(const char *errstr, ...)
41f8ee33771e small stylistic fix
arg@10ksloc.org
parents: 164
diff changeset
    34
{
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    35
	va_list ap;
123
61490330e90a cleaned up code
arg@10ksloc.org
parents: 92
diff changeset
    36
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    37
	va_start(ap, errstr);
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    38
	vfprintf(stderr, errstr, ap);
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    39
	va_end(ap);
92
4bee0aa5b286 using EXIT_stuff in exit() now
Anselm R. Garbe <garbeam@wmii.de>
parents: 84
diff changeset
    40
	exit(EXIT_FAILURE);
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    41
}
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    42
270
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    43
void *
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    44
erealloc(void *ptr, unsigned int size)
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    45
{
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    46
	void *res = realloc(ptr, size);
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    47
	if(!res)
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    48
		bad_malloc(size);
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    49
	return res;
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    50
}
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 217
diff changeset
    51
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    52
void
49
466591c2f967 implemented tagging a client
Anselm R. Garbe <garbeam@wmii.de>
parents: 43
diff changeset
    53
spawn(Arg *arg)
5
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    54
{
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
    55
	static char *shell = NULL;
123
61490330e90a cleaned up code
arg@10ksloc.org
parents: 92
diff changeset
    56
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
    57
	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
    58
		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
    59
523df4a3c1c4 using execl now, argv changed, using cmd and const char defs directly in the KEYS struct
arg@10ksloc.org
parents: 187
diff changeset
    60
	if(!arg->cmd)
5
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    61
		return;
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    62
	if(fork() == 0) {
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    63
		if(fork() == 0) {
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    64
			if(dpy)
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    65
				close(ConnectionNumber(dpy));
9
d567f430a81d fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents: 6
diff changeset
    66
			setsid();
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
    67
			execl(shell, shell, "-c", arg->cmd, NULL);
217
7b63c375d28c applied grabbing-- and shell_minimal
arg@10ksloc.org
parents: 189
diff changeset
    68
			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
    69
			perror(" failed");
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    70
		}
138
c1185dc7a36e some cleanups/fixes inspired by Jukka Salmi's feedback
arg@10ksloc.org
parents: 123
diff changeset
    71
		exit(0);
5
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    72
	}
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    73
	wait(0);
e5018cae273f added several other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 3
diff changeset
    74
}