Apply by doing
cd /usr/src (or the directory containing X11)
patch -p0 < xterm-xaw.patch
And then to rebuild and install
cd X11/xc/lib/Xaw ; make && make install
cd X11/xc/programs/xterm ; make && make install
diff --exclude=CVS -u -r /cdrom/X11/xc/programs/xterm/Tekproc.c X11/xc/programs/xterm/Tekproc.c
--- /cdrom/X11/xc/programs/xterm/Tekproc.c Fri Sep 5 05:17:06 1997
+++ X11/xc/programs/xterm/Tekproc.c Sun May 3 10:32:17 1998
@@ -74,6 +74,9 @@
#include <errno.h>
#include <setjmp.h>
#include <signal.h>
+
+#include "xterm.h"
+
#include "Tekparse.h"
#include "data.h"
#include "error.h"
@@ -1724,8 +1727,10 @@
#ifndef X_NOT_POSIX
+#ifndef linux
#define HAS_WAITPID
#endif
+#endif
#ifdef HAS_WAITPID
#include <sys/wait.h>
@@ -1743,7 +1748,7 @@
int pid;
#ifndef HAS_WAITPID
int waited;
- int (*chldfunc)();
+ SIGNAL_T (*chldfunc) PROTO((int n));
chldfunc = signal(SIGCHLD, SIG_DFL);
#endif
diff --exclude=CVS -u -r /cdrom/X11/xc/programs/xterm/charproc.c X11/xc/programs/xterm/charproc.c
--- /cdrom/X11/xc/programs/xterm/charproc.c Fri Sep 5 05:17:07 1997
+++ X11/xc/programs/xterm/charproc.c Sun May 3 10:32:18 1998
@@ -3774,7 +3774,6 @@
*s,
*ns,
*end,
- tmp[1024],
buf[32];
XIM xim = (XIM) NULL;
XIMStyles *xim_styles;
@@ -3789,17 +3788,18 @@
if ((p = XSetLocaleModifiers("@im=none")) != NULL && *p)
xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
} else {
- strcpy(tmp, term->misc.input_method);
- for(ns=s=tmp; ns && *s;) {
+ for(ns=s=term->misc.input_method; ns && *s;) {
while (*s && isspace(*s)) s++;
if (!*s) break;
if ((ns = end = strchr(s, ',')) == 0)
end = s + strlen(s);
while (isspace(*end)) end--;
- *end = '\0';
strcpy(buf, "@im=");
- strcat(buf, s);
+ if (end - (s + (sizeof(buf) - 5)) > 0)
+ end = s + (sizeof(buf) - 5);
+ strncat(buf, s, end - s);
+
if ((p = XSetLocaleModifiers(buf)) != NULL && *p
&& (xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL)) != NULL)
break;
@@ -3824,8 +3824,7 @@
}
found = False;
- strcpy(tmp, term->misc.preedit_type);
- for(s = tmp; s && !found;) {
+ for(s = term->misc.preedit_type; s && !found;) {
while (*s && isspace(*s)) s++;
if (!*s) break;
if ((ns = end = strchr(s, ',')) != 0)
@@ -3833,13 +3832,12 @@
else
end = s + strlen(s);
while (isspace(*end)) end--;
- *end = '\0';
- if (!strcmp(s, "OverTheSpot")) {
+ if (!strncmp(s, "OverTheSpot", end - s)) {
input_style = (XIMPreeditPosition | XIMStatusArea);
- } else if (!strcmp(s, "OffTheSpot")) {
+ } else if (!strncmp(s, "OffTheSpot", end - s)) {
input_style = (XIMPreeditArea | XIMStatusArea);
- } else if (!strcmp(s, "Root")) {
+ } else if (!strncmp(s, "Root", end - s)) {
input_style = (XIMPreeditNothing | XIMStatusNothing);
}
for (i = 0; (unsigned short)i < xim_styles->count_styles; i++)
@@ -4372,7 +4370,7 @@
XtOverrideTranslations(w, original);
return;
}
- (void) sprintf( mapName, "%sKeymap", params[0] );
+ (void) sprintf( mapName, "%.*sKeymap", (int)sizeof(mapName) - 10, params[0] );
(void) strcpy( mapClass, mapName );
if (islower(mapClass[0])) mapClass[0] = toupper(mapClass[0]);
XtGetSubresources( w, (XtPointer)&keymap, mapName, mapClass,
@@ -4790,7 +4788,7 @@
* not be set before the widget's realized, so it's tested separately).
*/
if(screen->colorMode) {
- if (TextWindow(screen) != 0 && (cc != bg)) {
+ if (TextWindow(screen) != 0 && (cc != bg) && (cc != fg)) {
/* we might have a colored foreground/background later */
xgcv.font = screen->fnt_norm->fid;
mask = (GCForeground | GCBackground | GCFont);
diff --exclude=CVS -u -r /cdrom/X11/xc/programs/xterm/main.c X11/xc/programs/xterm/main.c
--- /cdrom/X11/xc/programs/xterm/main.c Fri Sep 5 05:17:08 1997
+++ X11/xc/programs/xterm/main.c Sun May 3 10:32:18 1998
@@ -938,6 +938,12 @@
"default.",
NULL};
+static int abbrev (char *tst, char *cmp)
+{
+ size_t len = strlen(tst);
+ return ((len >= 2) && (!strncmp(tst, cmp, len)));
+}
+
static void Syntax (badOption)
char *badOption;
{
@@ -3467,7 +3473,7 @@
int i, n, ncap;
errstat err;
struct caplist *cl;
- char buf[64], numbuf[12];
+ char buf[64];
struct caplist *capvnew;
int ttythread();
int xwatchdogthread();
diff --exclude=CVS -u -r /cdrom/X11/xc/programs/xterm/misc.c X11/xc/programs/xterm/misc.c
--- /cdrom/X11/xc/programs/xterm/misc.c Fri Sep 5 05:17:09 1997
+++ X11/xc/programs/xterm/misc.c Sun May 3 10:32:18 1998
@@ -48,13 +48,13 @@
#include <X11/Xmu/SysUtil.h>
#include <X11/Xmu/WinUtil.h>
+#include "xterm.h"
+
#include "VTparse.h"
#include "data.h"
#include "error.h"
#include "menu.h"
-#include "xterm.h"
-
#if XtSpecificationRelease < 6
#ifndef X_GETTIMEOFDAY
#define X_GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *)0)
@@ -515,7 +515,9 @@
#if defined(ALLOWLOGGING) || defined(DEBUG)
#ifndef X_NOT_POSIX
+#ifndef linux
#define HAS_WAITPID
+#endif
#endif
/*
diff --exclude=CVS -u -r /cdrom/X11/xc/programs/xterm/os2main.c X11/xc/programs/xterm/os2main.c
--- /cdrom/X11/xc/programs/xterm/os2main.c Fri Sep 5 05:17:09 1997
+++ X11/xc/programs/xterm/os2main.c Sun May 3 10:32:19 1998
@@ -471,6 +471,12 @@
"default.",
NULL};
+static int abbrev (char *tst, char *cmp)
+{
+ size_t len = strlen(tst);
+ return ((len >= 2) && (!strncmp(tst, cmp, len)));
+}
+
static void Syntax (badOption)
char *badOption;
{
diff --exclude=CVS -u -r /cdrom/X11/xc/lib/Xaw/XawIm.c X11/xc/lib/Xaw/XawIm.c
--- /cdrom/X11/xc/lib/Xaw/XawIm.c Fri Sep 5 04:59:50 1997
+++ X11/xc/lib/Xaw/XawIm.c Sun May 3 10:32:28 1998
@@ -53,6 +53,7 @@
in this Software without prior written authorization from the X Consortium.
*/
+/* $XFree86: xc/lib/Xaw/XawIm.c,v 1.1.1.4.2.1 1998/05/01 04:02:42 dawes Exp $ */
#include <X11/IntrinsicP.h>
#include <X11/StringDefs.h>
@@ -452,7 +453,7 @@
} else {
for (i = 0; i < ve->im.im_list_num; i++) {
strcpy(modifiers, "@im=");
- strcat(modifiers, ve->im.im_list[i]);
+ strncat(modifiers, ve->im.im_list[i], sizeof(modifiers) - 5/*strlen("@im=")*/);
if ((p = XSetLocaleModifiers(modifiers)) != NULL && *p &&
(xim = XOpenIM(XtDisplay(ve->parent), NULL, NULL, NULL)) != NULL)
break;
@@ -1354,7 +1355,7 @@
strcpy(s, p);
save_s = s;
- while(1) {
+ while(i < (sizeof(list) / sizeof(list[0]))) {
list[i] = s;
ss = index(s, ',');
if (!ss) {
@@ -1645,10 +1646,10 @@
if ((vw = SearchVendorShell(inwidg)) && (ve = GetExtPart(vw)) &&
ve->im.xim && (p = GetIcTableShared(inwidg, ve)) && p->xic) {
- return(XwcLookupString(p->xic, event, buffer_return, bytes_buffer,
+ return(XwcLookupString(p->xic, event, buffer_return, bytes_buffer/sizeof(wchar_t),
keysym_return, status_return));
}
- ret = XLookupString( event, tmp_buf, 64, keysym_return,
+ ret = XLookupString( event, tmp_buf, sizeof(tmp_buf), keysym_return,
(XComposeStatus*) status_return );
for ( i = 0, tmp_p = tmp_buf, buf_p = buffer_return; i < ret; i++ ) {
*buf_p++ = _Xaw_atowc(*tmp_p++);