merge xinit 1.0.6

This commit is contained in:
matthieu 2007-09-15 17:12:01 +00:00
parent 7fd4ac2fb1
commit 59ec33559d
7 changed files with 260 additions and 105 deletions

View File

@ -64,6 +64,7 @@ MANDEFS = \
-D__miscmansuffix__=$(MISC_MAN_SUFFIX) \
-D__XSERVERNAME__=Xorg -D__XCONFIGFILE__=xorg.conf \
-D__xinitdir__=$(XINITDIR) \
-D__bindir__=$(bindir) \
-DSHELL_CMD=$(SHELL_CMD) $(ARCHMANDEFS)
SUFFIXES = .$(APP_MAN_SUFFIX) .man
@ -100,5 +101,9 @@ xinitrc_DATA = xinitrc
CLEANFILES = xinitrc startx $(appman_DATA)
EXTRA_DIST = xinitrc.cpp startx.cpp $(appman_PRE) \
startx.cmd xinitrc.cmd xinit.def
startx.cmd xinitrc.cmd xinit.def ChangeLog autogen.sh
ChangeLog:
(GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2)
dist-hook: ChangeLog

View File

@ -269,6 +269,7 @@ MANDEFS = \
-D__miscmansuffix__=$(MISC_MAN_SUFFIX) \
-D__XSERVERNAME__=Xorg -D__XCONFIGFILE__=xorg.conf \
-D__xinitdir__=$(XINITDIR) \
-D__bindir__=$(bindir) \
-DSHELL_CMD=$(SHELL_CMD) $(ARCHMANDEFS)
SUFFIXES = .$(APP_MAN_SUFFIX) .man
@ -292,7 +293,7 @@ SCRIPTDEFS = \
xinitrc_DATA = xinitrc
CLEANFILES = xinitrc startx $(appman_DATA)
EXTRA_DIST = xinitrc.cpp startx.cpp $(appman_PRE) \
startx.cmd xinitrc.cmd xinit.def
startx.cmd xinitrc.cmd xinit.def ChangeLog autogen.sh
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-am
@ -543,6 +544,9 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" distdir="$(distdir)" \
dist-hook
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
@ -727,8 +731,8 @@ uninstall-am: uninstall-appmanDATA uninstall-binPROGRAMS \
.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \
dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
distclean-compile distclean-generic distclean-hdr \
dist-gzip dist-hook dist-shar dist-tarZ dist-zip distcheck \
distclean distclean-compile distclean-generic distclean-hdr \
distclean-tags distcleancheck distdir distuninstallcheck dvi \
dvi-am html html-am info info-am install install-am \
install-appmanDATA install-binPROGRAMS install-binSCRIPTS \
@ -750,6 +754,11 @@ xinitrc: xinitrc.cpp
startx: startx.cpp Makefile
$(RAWCPP) $(SCRIPTDEFS) < $(srcdir)/startx.cpp | $(CPP_SED_MAGIC) > $@
ChangeLog:
(GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2)
dist-hook: ChangeLog
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -6,6 +6,9 @@
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `killpg' function. */
#undef HAVE_KILLPG
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H

123
app/xinit/configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.59 for xinit 1.0.3.
# Generated by GNU Autoconf 2.59 for xinit 1.0.6.
#
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
#
@ -269,8 +269,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='xinit'
PACKAGE_TARNAME='xinit'
PACKAGE_VERSION='1.0.3'
PACKAGE_STRING='xinit 1.0.3'
PACKAGE_VERSION='1.0.6'
PACKAGE_STRING='xinit 1.0.6'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
# Factoring default headers for most tests.
@ -791,7 +791,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures xinit 1.0.3 to adapt to many kinds of systems.
\`configure' configures xinit 1.0.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -857,7 +857,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of xinit 1.0.3:";;
short | recursive ) echo "Configuration of xinit 1.0.6:";;
esac
cat <<\_ACEOF
@ -998,7 +998,7 @@ fi
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
xinit configure 1.0.3
xinit configure 1.0.6
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
@ -1012,7 +1012,7 @@ cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by xinit $as_me 1.0.3, which was
It was created by xinit $as_me 1.0.6, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@ -1655,7 +1655,7 @@ fi
# Define the identity of the package.
PACKAGE='xinit'
VERSION='1.0.3'
VERSION='1.0.6'
cat >>confdefs.h <<_ACEOF
@ -4296,6 +4296,109 @@ fi
for ac_func in killpg
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_func" >&5
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
#define $ac_func innocuous_$ac_func
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
#ifdef __STDC__
# include <limits.h>
#else
# include <assert.h>
#endif
#undef $ac_func
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
{
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
char (*f) () = $ac_func;
#endif
#ifdef __cplusplus
}
#endif
int
main ()
{
return f != $ac_func;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
eval "$as_ac_var=no"
fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
# Build options
DEFAULT_XRDB=xrdb
@ -5213,7 +5316,7 @@ _ASBOX
} >&5
cat >&5 <<_CSEOF
This file was extended by xinit $as_me 1.0.3, which was
This file was extended by xinit $as_me 1.0.6, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -5276,7 +5379,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
xinit config.status 1.0.3
xinit config.status 1.0.6
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"

View File

@ -1,4 +1,3 @@
dnl Copyright 2005 Red Hat, Inc.
dnl
dnl Permission to use, copy, modify, distribute, and sell this software and its
@ -22,7 +21,7 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ([2.57])
AC_INIT(xinit,[1.0.3], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],xinit)
AC_INIT(xinit,[1.0.6], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],xinit)
AM_INIT_AUTOMAKE([dist-bzip2])
AM_MAINTAINER_MODE
@ -37,6 +36,8 @@ AC_CANONICAL_HOST
AC_TYPE_SIGNAL
AC_FUNC_FORK
AC_CHECK_FUNCS([killpg])
m4_ifdef([AS_HELP_STRING], , [m4_define([AS_HELP_STRING], m4_defn([AC_HELP_STRING]))])
# Build options

View File

@ -170,7 +170,6 @@ fi
removelist=
#if defined(HAS_COOKIE_MAKER) && defined(MK_COOKIE)
XCOMM set up default Xauth info for this machine
case `uname` in
Linux*)
@ -186,7 +185,15 @@ Linux*)
esac
authdisplay=${display:-:0}
#if defined(HAS_COOKIE_MAKER) && defined(MK_COOKIE)
mcookie=`MK_COOKIE`
#else
mcookie=`dd if=/dev/random bs=16 count=1 2>/dev/null | hexdump -e \\"%08x\\"`
if test x"$mcookie" = x; then
echo "Couldn't create cookie"
exit 1
fi
#endif
dummy=0
XCOMM create a file with auth information for the server. ':0' is a dummy.
@ -216,8 +223,6 @@ EOF
fi
done
#endif
#if defined(__SCO__) || defined(__UNIXWARE__)
if [ "$REMOTE_SERVER" = "TRUE" ]; then
exec SHELL_CMD ${client}

View File

@ -1,6 +1,6 @@
/* $Xorg: xinit.c,v 1.5 2001/02/09 02:05:49 xorgcvs Exp $ */
/* $XdotOrg: xc/programs/xinit/xinit.c,v 1.4 2005/10/04 01:27:34 ajax Exp $ */
/* $OpenBSD: xinit.c,v 1.2 2006/11/26 17:17:57 matthieu Exp $ */
/* $OpenBSD: xinit.c,v 1.3 2007/09/15 17:12:01 matthieu Exp $ */
/*
@ -35,8 +35,10 @@ in this Software without prior written authorization from The Open Group.
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>
#include <stdio.h>
#include <ctype.h>
#include <stdint.h>
#include <sys/param.h>
#ifdef X_POSIX_C_SOURCE
@ -79,25 +81,26 @@ char **envsave; /* to circumvent an UNIXOS2 problem */
#include <stdlib.h>
extern char **environ;
char **newenviron = NULL;
char **newenvironlast = NULL;
#ifndef SHELL
#define SHELL "sh"
#endif
#if !defined(HAS_VFORK) /* Imake */ && !defined(HAVE_WORKING_VFORK) /* autoconf*/
#ifndef HAVE_WORKING_VFORK
# ifndef vfork
# define vfork() fork()
# endif
#else
#if (defined(sun) && !defined(SVR4)) || defined(HAVE_VFORK_H)
# ifdef HAVE_VFORK_H
# include <vfork.h>
# endif
#endif
/* A/UX setpgid incorrectly removes the controlling terminal.
Per Posix, only setsid should do that. */
#if !defined(X_NOT_POSIX) && !defined(macII)
#define setpgrp setpgid
#ifdef macII
#define setpgid setpgrp
#endif
#ifdef __UNIXOS2__
@ -110,12 +113,12 @@ char **newenviron = NULL;
#define Execvpe(path, argv, envp) execvp(path, argv)
#endif
char *bindir = BINDIR;
char *server_names[] = {
const char *bindir = BINDIR;
const char * const server_names[] = {
#if defined(ultrix) && defined(mips)
"Xdec Digital color display on DECstation",
#endif
#ifdef sun /* Sun */
#if defined(sun) && !defined(XORG) /* Sun */
"Xsun Sun BW2, CG2, CG3, CG4, or CG6 on Sun 2, 3, 4, or 386i",
"Xsunmono Sun BW2 on Sun 2, 3, 4, or 386i ",
"Xsun24 Sun BW2, CG2, CG3, CG4, CG6, or CG8 on Sun 4",
@ -133,14 +136,16 @@ char *server_names[] = {
"XFree86 XFree86 displays",
#endif
#ifdef XORG
"Xorg X.Org displays",
"Xorg Common X server for most displays",
#endif
#ifdef __DARWIN__
"XDarwin Darwin/Mac OS X IOKit displays",
"XDarwinQuartz Mac OS X Quartz displays",
"XDarwinStartup Auto-select between XDarwin and XDarwinQuartz",
#endif
"Xvfb Virtual frame buffer",
"Xnest X server nested in a window on another X server",
"Xephyr kdrive-based nested X server",
NULL};
#ifndef XINITRC
@ -180,9 +185,7 @@ union wait status;
#endif /* SYSV */
int serverpid = -1;
int clientpid = -1;
#ifndef X_NOT_POSIX
volatile int gotSignal = 0;
#endif
static void Execute ( char **vec, char **envp );
static Bool waitforserver ( void );
@ -197,43 +200,13 @@ static void Error ( char *fmt, ... );
#ifdef RETSIGTYPE /* autoconf AC_TYPE_SIGNAL */
# define SIGVAL RETSIGTYPE
#else /* Imake */
#ifdef SIGNALRETURNSINT
#define SIGVAL int
#else
#define SIGVAL void
#endif
#endif /* RETSIGTYPE */
#ifdef X_NOT_POSIX
/* Can't use Error() in signal handlers */
#ifndef STDERR_FILENO
#define WRITES(s) write(STDERR_FILENO, (s), strlen(s))
#else
#define WRITES(s) write(fileno(stderr), (s), strlen(s))
#endif
#endif
static SIGVAL
sigCatch(int sig)
{
#ifdef X_NOT_POSIX
char buf[1024];
signal(SIGTERM, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGINT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
snprintf(buf, sizeof buf, "%s: unexpected signal %d\r\n",
program, sig);
WRITES(buf);
shutdown();
_exit(ERR_EXIT);
#else
/* On system with POSIX signals, just interrupt the system call */
gotSignal = sig;
#endif
}
static SIGVAL
@ -283,9 +256,7 @@ main(int argc, char *argv[], char *envp[])
int client_given = 0, server_given = 0;
int client_args_given = 0, server_args_given = 0;
int start_of_client_args, start_of_server_args;
#ifndef X_NOT_POSIX
struct sigaction sa;
#endif
#ifdef __UNIXOS2__
envsave = envp; /* circumvent an EMX problem */
@ -475,13 +446,7 @@ main(int argc, char *argv[], char *envp[])
#ifdef SIGCHLD
signal(SIGCHLD, SIG_DFL); /* Insurance */
#endif
#ifdef X_NOT_POSIX
signal(SIGTERM, sigCatch);
signal(SIGQUIT, sigCatch);
signal(SIGINT, sigCatch);
signal(SIGHUP, sigCatch);
signal(SIGPIPE, sigCatch);
#else
/* Let those signal interrupt the wait() call in the main loop */
memset(&sa, 0, sizeof sa);
sa.sa_handler = sigCatch;
@ -493,16 +458,14 @@ main(int argc, char *argv[], char *envp[])
sigaction(SIGINT, &sa, NULL);
sigaction(SIGHUP, &sa, NULL);
sigaction(SIGPIPE, &sa, NULL);
#endif
signal(SIGALRM, sigAlarm);
signal(SIGUSR1, sigUsr1);
if (startServer(server) > 0
&& startClient(client) > 0) {
pid = -1;
while (pid != clientpid && pid != serverpid
#ifndef X_NOT_POSIX
&& gotSignal == 0
#endif
)
pid = wait(NULL);
}
@ -513,12 +476,12 @@ main(int argc, char *argv[], char *envp[])
signal(SIGPIPE, SIG_IGN);
shutdown();
#ifndef X_NOT_POSIX
if (gotSignal != 0) {
Error("unexpected signal %d.\n", gotSignal);
exit(ERR_EXIT);
}
#endif
if (serverpid < 0 )
Fatal("Server error.\n");
if (clientpid < 0)
@ -596,32 +559,21 @@ processTimeout(int timeout, char *string)
static int
startServer(char *server[])
{
#if !defined(X_NOT_POSIX)
sigset_t mask, old;
#else
int old;
#endif
#ifdef __UNIXOS2__
sigset_t pendings;
#endif
#if !defined(X_NOT_POSIX)
sigemptyset(&mask);
sigaddset(&mask, SIGUSR1);
sigprocmask(SIG_BLOCK, &mask, &old);
#else
old = sigblock (sigmask (SIGUSR1));
#endif
serverpid = fork();
switch(serverpid) {
case 0:
/* Unblock */
#ifndef X_NOT_POSIX
sigprocmask(SIG_SETMASK, &old, NULL);
#else
sigsetmask (old);
#endif
/*
* don't hang on read/write to control tty
@ -643,12 +595,12 @@ startServer(char *server[])
* if client is xterm -L
*/
#ifndef __UNIXOS2__
setpgrp(0,getpid());
setpgid(0,getpid());
#endif
Execute (server, environ);
Error ("no server \"%s\" in PATH\n", server[0]);
{
char **cpp;
const char * const *cpp;
fprintf (stderr,
"\nUse the -- option, or make sure that %s is in your path and\n",
@ -691,7 +643,6 @@ startServer(char *server[])
*/
alarm (15);
#ifndef X_NOT_POSIX
#ifdef __UNIXOS2__
/*
* fg2003/05/06: work around a problem in EMX: sigsuspend()
@ -706,11 +657,6 @@ startServer(char *server[])
sigsuspend(&old);
alarm (0);
sigprocmask(SIG_SETMASK, &old, NULL);
#else
sigpause (old);
alarm (0);
sigsetmask (old);
#endif
if (waitforserver() == 0) {
Error("unable to connect to X server\r\n");
@ -723,15 +669,96 @@ startServer(char *server[])
return(serverpid);
}
static void
setWindowPath(void)
{
/* setting WINDOWPATH for clients */
Atom prop;
Atom actualtype;
int actualformat;
unsigned long nitems;
unsigned long bytes_after;
unsigned char *buf;
const char *windowpath;
char *newwindowpath;
unsigned long num;
char nums[10];
int numn;
prop = XInternAtom(xd, "XFree86_VT", False);
if (prop == None) {
#ifdef DEBUG
fprintf(stderr, "no XFree86_VT atom\n");
#endif
return;
}
if (XGetWindowProperty(xd, DefaultRootWindow(xd), prop, 0, 1,
False, AnyPropertyType, &actualtype, &actualformat,
&nitems, &bytes_after, &buf)) {
#ifdef DEBUG
fprintf(stderr, "no XFree86_VT property\n");
#endif
return;
}
if (nitems != 1) {
#ifdef DEBUG
fprintf(stderr, "%lu items in XFree86_VT property!\n", nitems);
#endif
XFree(buf);
return;
}
switch (actualtype) {
case XA_CARDINAL:
case XA_INTEGER:
case XA_WINDOW:
switch (actualformat) {
case 8:
num = (*(uint8_t *)(void *)buf);
break;
case 16:
num = (*(uint16_t *)(void *)buf);
break;
case 32:
num = (*(uint32_t *)(void *)buf);
break;
default:
#ifdef DEBUG
fprintf(stderr, "format %d in XFree86_VT property!\n", actualformat);
#endif
XFree(buf);
return;
}
break;
default:
#ifdef DEBUG
fprintf(stderr, "type %lx in XFree86_VT property!\n", actualtype);
#endif
XFree(buf);
return;
}
XFree(buf);
windowpath = getenv("WINDOWPATH");
numn = snprintf(nums, sizeof(nums), "%lu", num);
if (!windowpath) {
newwindowpath = malloc(10 + 1 + numn + 1);
sprintf(newwindowpath, "WINDOWPATH=%s", nums);
} else {
newwindowpath = malloc(10 + 1 + strlen(windowpath) + 1 + numn + 1);
sprintf(newwindowpath, "WINDOWPATH=%s:%s", windowpath, nums);
}
*newenvironlast++ = newwindowpath;
*newenvironlast = NULL;
}
static int
startClient(char *client[])
{
setWindowPath();
if ((clientpid = vfork()) == 0) {
if (setuid(getuid()) == -1) {
Error("cannot change uid: %s\n", strerror(errno));
_exit(ERR_EXIT);
}
setpgrp(0, getpid());
setpgid(0, getpid());
environ = newenviron;
#ifdef __UNIXOS2__
#undef environ
@ -750,7 +777,7 @@ startClient(char *client[])
return (clientpid);
}
#if !defined(X_NOT_POSIX) || defined(SYSV) || defined(__UNIXOS2__)
#ifndef HAVE_KILLPG
#define killpg(pgrp, sig) kill(-(pgrp), sig)
#endif
@ -830,11 +857,11 @@ set_environment(void)
for (oldPtr = environ; *oldPtr; oldPtr++) ;
nenvvars = (oldPtr - environ);
newenviron = (char **) malloc ((nenvvars + 2) * sizeof(char **));
newenviron = (char **) malloc ((nenvvars + 3) * sizeof(char **));
if (!newenviron) {
fprintf (stderr,
"%s: unable to allocate %d pointers for environment\n",
program, nenvvars + 2);
program, nenvvars + 3);
exit (1);
}
@ -846,11 +873,13 @@ set_environment(void)
/* copy pointers to other variables */
for (oldPtr = environ; *oldPtr; oldPtr++) {
if (strncmp (*oldPtr, "DISPLAY=", 8) != 0) {
if (strncmp (*oldPtr, "DISPLAY=", 8) != 0
&& strncmp (*oldPtr, "WINDOWPATH=", 11) != 0) {
*newPtr++ = *oldPtr;
}
}
*newPtr = NULL;
newenvironlast=newPtr;
return;
}