pkgsrc/wm/uwm/patches/patch-ab

149 lines
3.6 KiB
Text

$NetBSD: patch-ab,v 1.2 2005/12/06 15:57:22 joerg Exp $
--- uwm.c.orig Sun Oct 23 22:21:55 1988
+++ uwm.c Wed Jan 19 08:20:54 2000
@@ -41,9 +41,22 @@ char *ProgramName;
#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 X_NOT_STDC_ENV
+char *malloc();
+#endif
#ifdef PROFIL
-#include <signal.h>
/*
* Dummy handler for profiling.
*/
@@ -53,6 +66,27 @@ ptrap()
}
#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[] = {
@@ -103,7 +137,6 @@ char **environ;
GC gc; /* graphics context for gray background */
XImage grayimage; /* for gray background */
XGCValues xgc; /* to create font GCs */
- char *malloc();
Bool fallbackMFont = False, /* using default GC font for menus, */
fallbackPFont = False, /* popups, */
fallbackIFont = False; /* icons */
@@ -115,6 +148,10 @@ char **environ;
#ifdef PROFIL
signal(SIGTERM, ptrap);
#endif
+#ifdef SIGCHLD
+ /* no zombies */
+ clear_children();
+#endif
/*
* Set up internal defaults.
@@ -369,7 +406,7 @@ char **environ;
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 +416,7 @@ char **environ;
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 +426,7 @@ char **environ;
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 +722,11 @@ char **environ;
*/
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 +740,26 @@ InitBindings()
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 +769,7 @@ InitBindings()
perror("uwm: cannot open temp file");
exit(1);
}
+#endif
Lineno = 1;
yyparse();
fclose(yyin);