util.c
changeset 5 e5018cae273f
parent 3 e969f3575b7a
child 6 e0cefb3981c8
equal deleted inserted replaced
4:991bd8b0771e 5:e5018cae273f
     5 
     5 
     6 #include <stdarg.h>
     6 #include <stdarg.h>
     7 #include <stdio.h>
     7 #include <stdio.h>
     8 #include <stdlib.h>
     8 #include <stdlib.h>
     9 #include <string.h>
     9 #include <string.h>
       
    10 #include <sys/types.h>
       
    11 #include <sys/wait.h>
       
    12 #include <unistd.h>
       
    13 
       
    14 #include "util.h"
    10 
    15 
    11 void
    16 void
    12 error(char *errstr, ...) {
    17 error(char *errstr, ...) {
    13 	va_list ap;
    18 	va_list ap;
    14 	va_start(ap, errstr);
    19 	va_start(ap, errstr);
    73 {
    78 {
    74 	void *tmp = *p1;
    79 	void *tmp = *p1;
    75 	*p1 = *p2;
    80 	*p1 = *p2;
    76 	*p2 = tmp;
    81 	*p2 = tmp;
    77 }
    82 }
       
    83 
       
    84 void
       
    85 spawn(Display *dpy, const char *shell, const char *cmd)
       
    86 {
       
    87 	if(!cmd || !shell)
       
    88 		return;
       
    89 	if(fork() == 0) {
       
    90 		if(fork() == 0) {
       
    91 			if(dpy)
       
    92 				close(ConnectionNumber(dpy));
       
    93 			execl(shell, shell, "-c", cmd, (const char *)0);
       
    94 			fprintf(stderr, "gridwm: execl %s", shell);
       
    95 			perror(" failed");
       
    96 		}
       
    97 		exit (0);
       
    98 	}
       
    99 	wait(0);
       
   100 }