$NetBSD: patch-ab,v 1.3 2013/01/11 23:36:16 joerg Exp $ --- uwm.c.orig 1988-10-23 13:21:55.000000000 +0000 +++ uwm.c @@ -41,9 +41,25 @@ char *ProgramName; #include "uwm.h" #include +#include + +#ifdef CSRG_BASED +#undef MIN +#undef MAX +#include +#if defined(BSD) && BSD >= 199306 +#define HAVE_MKSTEMP +#endif +#endif + +#ifdef X_NOT_STDC_ENV +char *malloc(); +#endif + +static void SetEnvironment (void); +void LoadXDefaults (void); #ifdef PROFIL -#include /* * Dummy handler for profiling. */ @@ -53,6 +69,27 @@ ptrap() } #endif +#ifdef SIGCHLD +#include +/* + * 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 +140,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 +151,10 @@ char **environ; #ifdef PROFIL signal(SIGTERM, ptrap); #endif +#ifdef SIGCHLD + /* no zombies */ + clear_children(); +#endif /* * Set up internal defaults. @@ -369,7 +409,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 +419,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 +429,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 +725,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 +743,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 +772,7 @@ InitBindings() perror("uwm: cannot open temp file"); exit(1); } +#endif Lineno = 1; yyparse(); fclose(yyin); @@ -998,7 +1054,7 @@ static int parse_boolean (s) return -1; } -LoadXDefaults () +void LoadXDefaults (void) { Keyword *k; char *option; @@ -1068,7 +1124,7 @@ char **newenviron; * make a new copy of environment that has room for DISPLAY */ -SetEnvironment () +static void SetEnvironment (void) { int nenvvars; char **newPtr, **oldPtr;