freebsd-ports/x11-wm/uwm/files/patch-ab
Trevor Johnson df2c154abf Add uwm version 19881027, a no-frills window manager from X11R3.
Obtained from:	NetBSD pkgsrc/x11/uwm
2000-10-16 21:41:56 +00:00

137 lines
3.1 KiB
Text

$NetBSD: patch-ab,v 1.2 2000/01/19 07:24:07 itohy Exp $
--- uwm.c.orig Sun Oct 23 13:21:55 1988
+++ uwm.c Mon Oct 16 08:58:41 2000
@@ -41,9 +41,18 @@
#include "uwm.h"
#include <ctype.h>
+#include <signal.h>
+
+#ifdef CSRG_BASED
+#undef MIN
+#undef MAX
+#include <sys/param.h>
+#if defined(BSD) && BSD >= 199306
+#define HAVE_MKSTEMP
+#endif
+#endif
#ifdef PROFIL
-#include <signal.h>
/*
* Dummy handler for profiling.
*/
@@ -53,6 +62,27 @@
}
#endif
+#ifdef SIGCHLD
+#include <sys/wait.h>
+/*
+ * clear (probably inherited) children which are dead or will die.
+ */
+clear_children()
+{
+ int status, pid;
+
+ do {
+#ifdef CSRG_BASED
+ pid = wait3(&status, WNOHANG, (struct rusage *) 0);
+#else /* SVR4 */
+ pid = waitpid(-1, &status, WNOHANG);
+#endif
+ } while (pid != 0 && pid != -1);
+
+ signal(SIGCHLD, clear_children);
+}
+#endif
+
#define gray_width 16
#define gray_height 16
static char gray_bits[] = {
@@ -115,6 +145,10 @@
#ifdef PROFIL
signal(SIGTERM, ptrap);
#endif
+#ifdef SIGCHLD
+ /* no zombies */
+ clear_children();
+#endif
/*
* Set up internal defaults.
@@ -369,7 +403,7 @@
if (IFontInfo == NULL) {
fprintf(stderr, "uwm: Unable to open icon font '%s', using server default.\n",
IFontName);
- IFontInfo = XQueryFont(dpy, DefaultGC(dpy, scr)->gid);
+ IFontInfo = XQueryFont(dpy, XGContextFromGC(DefaultGC(dpy, scr)));
fallbackIFont = True;
}
PFontInfo = XLoadQueryFont(dpy, PFontName);
@@ -379,7 +413,7 @@
if (fallbackIFont)
PFontInfo = IFontInfo;
else
- PFontInfo = XQueryFont(dpy, DefaultGC(dpy, scr)->gid);
+ PFontInfo = XQueryFont(dpy, XGContextFromGC(DefaultGC(dpy, scr)));
fallbackPFont = True;
}
MFontInfo = XLoadQueryFont(dpy, MFontName);
@@ -389,7 +423,7 @@
if (fallbackIFont || fallbackPFont)
MFontInfo = fallbackPFont ? PFontInfo : IFontInfo;
else
- MFontInfo = XQueryFont(dpy, DefaultGC(dpy, scr)->gid);
+ MFontInfo = XQueryFont(dpy, XGContextFromGC(DefaultGC(dpy, scr)));
fallbackMFont = True;
}
@@ -685,7 +719,11 @@
*/
InitBindings()
{
+#ifdef HAVE_MKSTEMP
+ int fd;
+#else
char *mktemp();
+#endif
char *tempfile; /* Temporary filename. */
register FILE *fp; /* Temporary file pointer. */
register char **ptr; /* Default bindings string array pointer. */
@@ -699,15 +737,26 @@
exit (1);
}
strcpy (tempfile, TEMPFILE);
+#ifdef HAVE_MKSTEMP
+ if ((fd = mkstemp(tempfile)) < 0 || (fp = fdopen(fd, "r+")) == NULL) {
+ perror("uwm: cannot create temp file");
+ exit(1);
+ }
+#else
sfilename = mktemp(tempfile);
if ((fp = fopen(tempfile, "w")) == NULL) {
perror("uwm: cannot create temp file");
exit(1);
}
+#endif
for (ptr = DefaultBindings; *ptr; ptr++) {
fputs(*ptr, fp);
fputc('\n', fp);
}
+#ifdef HAVE_MKSTEMP
+ rewind(fp);
+ yyin = fp;
+#else
fclose(fp);
/*
@@ -717,6 +766,7 @@
perror("uwm: cannot open temp file");
exit(1);
}
+#endif
Lineno = 1;
yyparse();
fclose(yyin);