Compare commits

...

No commits in common. "c8" and "c10s" have entirely different histories.
c8 ... c10s

28 changed files with 1 additions and 3650 deletions

1
.gitignore vendored
View File

@ -1 +0,0 @@
SOURCES/motif-2.3.4-src.tgz

View File

@ -1 +0,0 @@
49ecfe2a0939232ca78ce318d938044e7f751b6d SOURCES/motif-2.3.4-src.tgz

View File

@ -1,54 +0,0 @@
From 591ae206f83a359a590090524c286cb03e5c2494 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Tue, 6 Sep 2022 17:39:19 +0200
Subject: [PATCH] EditresCom: Fix build with modern systems.
The code in _XtGetStringValues() depends on the LONG_BIT define.
However, modern system require -D_XOPEN_SOURCE to set LONG_BIT, so with
the current code as it is, LONG_BIT is not defined (from limits.h) and
the build wrongly assumes this is a 32bit build.
Unfortunately, defining _XOPEN_SOURCE to have LONG_BIT set would disable
the definition of caddr_t, a deprecated definition inherited from BSD,
so we also need to replace that with a simple cast to (long *).
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/EditresCom.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/lib/Xm/EditresCom.c b/lib/Xm/EditresCom.c
index 4114ff8b..c93d6844 100644
--- a/lib/Xm/EditresCom.c
+++ b/lib/Xm/EditresCom.c
@@ -43,6 +43,9 @@ in this Software without prior written authorization from the X Consortium.
#include <config.h>
#endif
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 700
+#endif
#include <X11/IntrinsicP.h> /* To get into the composite and core widget
structures. */
@@ -59,6 +62,7 @@ in this Software without prior written authorization from the X Consortium.
#include <X11/Xmd.h>
#include <stdio.h>
+#include <limits.h>
#define _XEditResPutBool _XEditResPut8
#define _XEditResPutResourceType _XEditResPut8
@@ -1608,7 +1612,7 @@ _XtGetStringValues(Widget w, Arg *warg, int numargs)
old_handler = XtAppSetWarningMsgHandler(XtWidgetToApplicationContext(w),
EditResCvtWarningHandler);
from.size = res->resource_size;
- from.addr = (caddr_t)&value;
+ from.addr = (void *)&value;
to.addr = NULL;
to.size = 0;
to_color.addr = NULL;
--
2.37.3

View File

@ -1,32 +0,0 @@
From 2fa554b01ef6079a9b35df9332bdc4f139ed67e0 Mon Sep 17 00:00:00 2001
From: Alan Coopersmith <alan.coopersmith@oracle.com>
Date: Sat, 29 Apr 2023 17:50:39 -0700
Subject: [PATCH] Fix CVE-2023-43788: Out of bounds read in
XpmCreateXpmImageFromBuffer
When the test case for CVE-2022-46285 was run with the Address Sanitizer
enabled, it found an out-of-bounds read in ParseComment() when reading
from a memory buffer instead of a file, as it continued to look for the
closing comment marker past the end of the buffer.
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
---
lib/Xm/Xpmdata.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/Xm/Xpmdata.c b/lib/Xm/Xpmdata.c
index 7524e65..0b0f1f3 100644
--- a/lib/Xm/Xpmdata.c
+++ b/lib/Xm/Xpmdata.c
@@ -108,7 +108,7 @@ ParseComment(xpmData *data)
n++;
s2++;
} while (c == *s2 && *s2 != '\0' && c);
- if (*s2 == '\0') {
+ if (*s2 == '\0' || c == '\0') {
/* this is the end of the comment */
notend = 0;
mdata->cptr--;
--
2.41.0

View File

@ -1,36 +0,0 @@
From 7e21cb63b9a1ca760a06cc4cd9b19bbc3fcd8f51 Mon Sep 17 00:00:00 2001
From: Alan Coopersmith <alan.coopersmith@oracle.com>
Date: Sat, 29 Apr 2023 18:30:34 -0700
Subject: [PATCH] Fix CVE-2023-43789: Out of bounds read on XPM with corrupted
colormap
Found with clang's libfuzzer
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
---
lib/Xm/Xpmdata.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/Xm/Xpmdata.c b/lib/Xm/Xpmdata.c
index 0b0f1f3..6e87455 100644
--- a/lib/Xm/Xpmdata.c
+++ b/lib/Xm/Xpmdata.c
@@ -259,13 +259,13 @@ xpmNextWord(
int c;
if (!mdata->type || mdata->type == XPMBUFFER) {
- while (isspace(c = *mdata->cptr) && c != mdata->Eos)
+ while ((c = *mdata->cptr) && isspace(c) && (c != mdata->Eos))
mdata->cptr++;
do {
c = *mdata->cptr++;
*buf++ = c;
n++;
- } while (!isspace(c) && c != mdata->Eos && n < buflen);
+ } while (c && !isspace(c) && (c != mdata->Eos) && (n < buflen));
n--;
mdata->cptr--;
} else {
--
2.41.0

View File

@ -1,61 +0,0 @@
From 49791ea9aa84c64af114f564d4c46228263d1439 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Tue, 19 Nov 2024 18:40:33 +0100
Subject: [PATCH 1/7] build: Check for Xinerama availability
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
configure.ac | 22 ++++++++++++++++++++++
lib/Xm/Makefile.am | 2 +-
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index d57f71e6..f0b2617d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -280,7 +280,29 @@ AC_SUBST(LIB_XP)
AC_FIND_XFT
AC_IMAGE_SUPPORT
+AC_ARG_ENABLE(xinerama,[ --enable-xinerama Enable Xinerama (default=yes)])
+if test "x$enable_xinerama" = "x"
+then
+ enable_xinerama="yes"
+fi
+
+if test "x$enable_xinerama" = "xyes"
+then
+ AC_MSG_CHECKING([for libXinerama])
+ AC_CHECK_HEADERS(X11/extensions/Xinerama.h,
+ AC_CHECK_LIB(Xinerama, XineramaQueryExtension, ,enable_xinerama="no"),
+ enable_xinerama="no")
+fi
+
+if test "x$enable_xinerama" = "xyes"
+then
+ LIB_XINERAMA=-lXinerama
+else
+ LIB_XINERAMA=
+fi
+AM_CONDITIONAL(XINERAMA, test "$enable_xinerama" = "yes")
+AC_SUBST(LIB_XINERAMA)
# AM_CONDITIONAL(Motif22Compatibility, test x$enable_motif22_compatibility = xyes)
diff --git a/lib/Xm/Makefile.am b/lib/Xm/Makefile.am
index a95fa2db..07b733f5 100644
--- a/lib/Xm/Makefile.am
+++ b/lib/Xm/Makefile.am
@@ -71,7 +71,7 @@ else
PRINTS_SRC =
endif
-libXm_la_LIBADD = ${X_LIBS} ${X_XMU} -lXt -lXext ${LIB_XP} -lX11 ${X_EXTRA_LIBS}
+libXm_la_LIBADD = ${X_LIBS} ${X_XMU} -lXt -lXext ${LIB_XP} ${LIB_XINERAMA} -lX11 ${X_EXTRA_LIBS}
noinst_HEADERS = BaseClassI.h \
BitmapsI.h \
--
2.47.1

View File

@ -1,419 +0,0 @@
From 011e62e69fb87e78a128487a043cc13b042bb8b5 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Wed, 20 Nov 2024 10:26:28 +0100
Subject: [PATCH 2/7] Xm/Display: Add optional Xinerama support
Xinerama support is disabled by default, unless the Xresource
"enableXinerama" is set in the X resources database, e.g.:
*enableXinerama: True
This also provides an additional private Screen API to get the monitor
boundaries given a point on screen. This is meant to be used in the
following commits to implement Xinerama awareness in the relevant
widgets.
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
doc/man/man3/XmDisplay.3 | 2 +
lib/Xm/Display.c | 95 +++++++++++++++++++++++++++++
lib/Xm/DisplayP.h | 18 ++++++
lib/Xm/Screen.c | 128 +++++++++++++++++++++++++++++++++++++++
lib/Xm/ScreenP.h | 8 +++
lib/Xm/xmstring.list.in | 2 +
6 files changed, 253 insertions(+)
diff --git a/doc/man/man3/XmDisplay.3 b/doc/man/man3/XmDisplay.3
index a57ea089..ec360c80 100644
--- a/doc/man/man3/XmDisplay.3
+++ b/doc/man/man3/XmDisplay.3
@@ -158,6 +158,8 @@ XmNnoRenditionCallbackXmCCallbackXtCallbackListNULLC
_____
XmNuserDataXmCUserDataXtPointerNULLCSG
_____
+XmNenableXineramaXmCEnableXineramaBooleanFalseC
+_____
.TE
.IP "\fBXmNdefaultButtonEmphasis\fP" 10
Specifies whether to change the look of the PushButton widget and
diff --git a/lib/Xm/Display.c b/lib/Xm/Display.c
index 55fe4cd3..3ab047f2 100644
--- a/lib/Xm/Display.c
+++ b/lib/Xm/Display.c
@@ -35,6 +35,9 @@ static char rcsid[] = "$TOG: Display.c /main/23 1997/06/18 17:36:59 samborn $"
#include <X11/Intrinsic.h>
#include <X11/extensions/shape.h>
+#ifdef HAVE_LIBXINERAMA
+#include <X11/extensions/Xinerama.h>
+#endif
#include <X11/Xatom.h>
#include <Xm/AtomMgr.h>
@@ -273,6 +276,13 @@ static XtResource resources[] = {
XtOffsetOf(WMShellRec, wm.wm_hints.icon_pixmap),
XmRImmediate, NULL
},
+ /* Xinerama support */
+ {
+ XmNenableXinerama, XmCEnableXinerama,
+ XmRBoolean, sizeof(Boolean),
+ Offset(display.enable_xinerama),
+ XmRImmediate, (XtPointer) False
+ },
};
#undef Offset
@@ -388,6 +398,45 @@ DisplayClassInitialize( void )
XmMakeCanonicalString("_MOTIF_DRAG_AND_DROP_MESSAGE");
}
+static void
+DisplayInitializeXinerama( XmDisplay xmDisplay )
+{
+#ifdef HAVE_LIBXINERAMA
+ Display *display = XtDisplay(xmDisplay);
+ int dummy1, dummy2;
+ Status have_xinerama;
+
+ xmDisplay->display.monitors = NULL;
+ xmDisplay->display.n_monitors = 0;
+
+ /* Xinerama support is disabled by default, unless XmNenableXinerama is set */
+ if (!xmDisplay->display.enable_xinerama) {
+#ifdef DEBUG_XINERAMA
+ printf("XINERAMA support not enabled\n");
+#endif /* DEBUG_XINERAMA */
+ return;
+ }
+
+ if (!XineramaQueryExtension(display, &dummy1, &dummy2)) {
+#ifdef DEBUG_XINERAMA
+ printf("XINERAMA extension not available\n");
+#endif /* DEBUG_XINERAMA */
+ xmDisplay->display.enable_xinerama = False;
+ return;
+ }
+
+ if (!XineramaIsActive(display)) {
+#ifdef DEBUG_XINERAMA
+ printf("XINERAMA extension not activated\n");
+#endif /* DEBUG_XINERAMA */
+ xmDisplay->display.enable_xinerama = False;
+ return;
+ }
+
+ _XmDisplayUpdateXinerama(xmDisplay);
+#endif /* HAVE_LIBXINERAMA */
+}
+
/*ARGSUSED*/
static void
SetDragReceiverInfo(
@@ -553,6 +602,8 @@ DisplayInitialize(
XmDRAG_PREFER_PREREGISTER;
}
+ DisplayInitializeXinerama(xmDisplay);
+
_XmVirtKeysInitialize (new_widget);
_XmProcessLock();
@@ -672,6 +723,9 @@ DisplayDestroy(
_XmVirtKeysDestroy (w);
+#ifdef HAVE_LIBXINERAMA
+ XFree(dd->display.monitors);
+#endif /* HAVE_LIBXINERAMA */
XDeleteContext( XtDisplay( w), None, context) ;
}
@@ -1225,3 +1279,44 @@ _XmSetThicknessDefault0(
value->addr = (XPointer)&thickness;
}
+
+
+Boolean
+_XmDisplayUseXinerama(
+ XmDisplay xmDisplay )
+{
+ return xmDisplay && xmDisplay->display.enable_xinerama;
+}
+
+
+void
+_XmDisplayUpdateXinerama(
+ XmDisplay xmDisplay )
+{
+#ifdef HAVE_LIBXINERAMA
+#ifdef DEBUG_XINERAMA
+ int i;
+#endif /* DEBUG_XINERAMA */
+
+ if (!_XmDisplayUseXinerama(xmDisplay))
+ return;
+
+#ifdef DEBUG_XINERAMA
+ printf("Updating XINERAMA configuration\n");
+#endif /* DEBUG_XINERAMA */
+
+ if (xmDisplay->display.monitors)
+ XFree(xmDisplay->display.monitors);
+
+ xmDisplay->display.monitors =
+ XineramaQueryScreens (XtDisplay(xmDisplay), &xmDisplay->display.n_monitors);
+
+#ifdef DEBUG_XINERAMA
+ for (i = 0; i < xmDisplay->display.n_monitors; ++i) {
+ printf("XINERAMA Monitor %i: (%i,%i) [%ix%i]\n", i,
+ xmDisplay->display.monitors[i].x_org, xmDisplay->display.monitors[i].y_org,
+ xmDisplay->display.monitors[i].width, xmDisplay->display.monitors[i].height);
+ }
+#endif /* DEBUG_XINERAMA */
+#endif /* HAVE_LIBXINERAMA */
+}
diff --git a/lib/Xm/DisplayP.h b/lib/Xm/DisplayP.h
index 655c29b6..a2420f96 100644
--- a/lib/Xm/DisplayP.h
+++ b/lib/Xm/DisplayP.h
@@ -23,6 +23,14 @@
#ifndef _XmDisplayP_h
#define _XmDisplayP_h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_LIBXINERAMA
+#include <X11/extensions/Xinerama.h>
+#endif
+
#include <Xm/DesktopP.h>
#include <Xm/VendorSEP.h>
#include <Xm/DropSMgr.h>
@@ -115,6 +123,11 @@ typedef struct {
Boolean enable_unselectable_drag;
Boolean enable_thin_thickness;
Boolean enable_multi_key_bindings;
+ Boolean enable_xinerama;
+#ifdef HAVE_LIBXINERAMA
+ XineramaScreenInfo *monitors;
+ int n_monitors;
+#endif
} XmDisplayPart, *XmDisplayPartPtr;
typedef struct _XmDisplayInfo {
@@ -143,6 +156,11 @@ externalref XmDisplayClassRec xmDisplayClassRec;
externalref String _Xm_MOTIF_DRAG_AND_DROP_MESSAGE ;
+extern Boolean _XmDisplayUseXinerama(
+ XmDisplay xmDisplay ) ;
+
+extern void _XmDisplayUpdateXinerama(
+ XmDisplay xmDisplay ) ;
#ifdef __cplusplus
} /* Close scope of 'extern "C"' declaration which encloses file. */
diff --git a/lib/Xm/Screen.c b/lib/Xm/Screen.c
index 10ba8d2b..44abcfb3 100644
--- a/lib/Xm/Screen.c
+++ b/lib/Xm/Screen.c
@@ -396,7 +396,67 @@ GetUnitFromFont(
}
}
+#ifdef HAVE_LIBXINERAMA
+/* ARGSUSED */
+static void
+StructureNotifyHandler(
+ Widget wid,
+ XtPointer data,
+ XEvent *event,
+ Boolean *cont )
+{
+ Display *display = XtDisplay(wid);
+
+#ifdef DEBUG_XINERAMA
+ printf("Root event received\n");
+#endif /* DEBUG_XINERAMA */
+ if (event->type == ConfigureNotify)
+ _XmDisplayUpdateXinerama((XmDisplay) XmGetXmDisplay(display)) ;
+}
+
+/* ARGSUSED */
+static void
+InstallStructureNotifyHandler(
+ XmScreen xmScreen)
+{
+ Display *display = XtDisplay(xmScreen);
+ Window rootwindow;
+ XWindowAttributes rootattributes;
+
+ if (!_XmDisplayUseXinerama((XmDisplay) XmGetXmDisplay(display)))
+ return;
+
+ rootwindow = RootWindowOfScreen(XtScreen(xmScreen));
+ XGetWindowAttributes(display, rootwindow, &rootattributes);
+ XSelectInput(display,
+ rootwindow,
+ StructureNotifyMask | rootattributes.your_event_mask);
+ XtRegisterDrawable(display, rootwindow, (Widget)xmScreen);
+ XtAddEventHandler((Widget)xmScreen,
+ (EventMask) StructureNotifyMask, True,
+ StructureNotifyHandler, (XtPointer) NULL);
+}
+
+/* ARGSUSED */
+static void
+UninstallStructureNotifyHandler(
+ XmScreen xmScreen)
+{
+ Display *display = XtDisplay(xmScreen);
+ Window rootwindow;
+ XWindowAttributes rootattributes;
+
+ if (!_XmDisplayUseXinerama((XmDisplay) XmGetXmDisplay(display)))
+ return;
+
+ rootwindow = RootWindowOfScreen(XtScreen(xmScreen));
+ XtUnregisterDrawable(display, rootwindow);
+ XtRemoveEventHandler((Widget)xmScreen,
+ (EventMask) StructureNotifyMask, True,
+ StructureNotifyHandler, (XtPointer) NULL);
+}
+#endif /* HAVE_LIBXINERAMA */
/************************************************************************
*
@@ -413,6 +473,8 @@ Initialize(
{
XmScreen xmScreen = (XmScreen)new_widget;
Display *display = XtDisplay(new_widget);
+ Window rootwindow;
+ XWindowAttributes rootattributes;
xmScreen->screen.screenInfo = NULL;
@@ -474,6 +536,9 @@ Initialize(
}
#endif
+#ifdef HAVE_LIBXINERAMA
+ InstallStructureNotifyHandler(xmScreen);
+#endif /* HAVE_LIBXINERAMA */
}
/************************************************************************
@@ -672,6 +737,10 @@ Destroy(
/* need to remove pixmap and GC related to this screen */
_XmCleanPixmapCache (XtScreen(widget), NULL);
+
+#ifdef HAVE_LIBXINERAMA
+ UninstallStructureNotifyHandler(xmScreen);
+#endif /* HAVE_LIBXINERAMA */
}
static void
@@ -1447,3 +1516,62 @@ XmGetXmScreen(
_XmAppUnlock(app);
return widget;
}
+
+void
+_XmScreenGetBoundariesAtpoint(
+ Screen *screen,
+ Position pt_x,
+ Position pt_y,
+ Position *ret_x,
+ Position *ret_y,
+ Position *ret_max_x,
+ Position *ret_max_y )
+{
+ XmDisplay xmDisplay;
+ Position screen_x, screen_y;
+ Position screen_max_x, screen_max_y;
+#ifdef HAVE_LIBXINERAMA
+ Position tmp_x, tmp_y;
+ Position tmp_max_x, tmp_max_y;
+ int i;
+#endif /* HAVE_LIBXINERAMA */
+
+ xmDisplay = (XmDisplay) XmGetXmDisplay(DisplayOfScreen(screen));
+ screen_x = 0;
+ screen_y = 0;
+ screen_max_x = WidthOfScreen(screen);
+ screen_max_y = HeightOfScreen(screen);
+
+ if (!_XmDisplayUseXinerama(xmDisplay))
+ goto out;
+
+#ifdef HAVE_LIBXINERAMA
+ for (i = 0; i < xmDisplay->display.n_monitors; ++i) {
+ tmp_x = xmDisplay->display.monitors[i].x_org;
+ tmp_y = xmDisplay->display.monitors[i].y_org;
+ tmp_max_x = tmp_x + xmDisplay->display.monitors[i].width;
+ tmp_max_y = tmp_y + xmDisplay->display.monitors[i].height;
+
+ if (pt_x >= tmp_x && pt_x < tmp_max_x && pt_y >= tmp_y && pt_y < tmp_max_y) {
+ screen_x = tmp_x;
+ screen_y = tmp_y;
+ screen_max_x = tmp_max_x;
+ screen_max_y = tmp_max_y;
+ break; /* We have a match */
+ }
+ }
+#endif /* HAVE_LIBXINERAMA */
+out:
+#ifdef DEBUG_XINERAMA
+ printf("Point (%i,%i) constrained within (%i,%i) and (%i,%i)\n",
+ pt_x, pt_y, screen_x, screen_y, screen_max_x, screen_max_y);
+#endif /* DEBUG_XINERAMA */
+ if (ret_x)
+ *ret_x = screen_x;
+ if (ret_y)
+ *ret_y = screen_y;
+ if (ret_max_x)
+ *ret_max_x = screen_max_x;
+ if (ret_max_y)
+ *ret_max_y = screen_max_y;
+}
diff --git a/lib/Xm/ScreenP.h b/lib/Xm/ScreenP.h
index c870c19e..b4b95a6f 100644
--- a/lib/Xm/ScreenP.h
+++ b/lib/Xm/ScreenP.h
@@ -134,6 +134,14 @@ typedef struct _XmScreenRec {
XmScreenPart screen;
} XmScreenRec;
+extern void _XmScreenGetBoundariesAtpoint(
+ Screen *screen,
+ Position pt_x,
+ Position pt_y,
+ Position *ret_x,
+ Position *ret_y,
+ Position *ret_max_x,
+ Position *ret_max_y ) ;
#ifdef __cplusplus
} /* Close scope of 'extern "C"' declaration which encloses file. */
diff --git a/lib/Xm/xmstring.list.in b/lib/Xm/xmstring.list.in
index 8c0c4f9a..5887e7ad 100644
--- a/lib/Xm/xmstring.list.in
+++ b/lib/Xm/xmstring.list.in
@@ -1692,6 +1692,8 @@ CFontEncoding
NxftFont
CXftFont
SUTF8_STRING
+NenableXinerama
+CEnableXinerama
#file XmStrDefsI.h
#table _XmStringsI
--
2.47.1

View File

@ -1,119 +0,0 @@
From 10168aa7f16afb32e71d9e0a22fa8f90fb301bf4 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 21 Nov 2024 11:52:22 +0100
Subject: [PATCH 3/7] Xm/MenuShell: Use Xinerama to place menus
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/MenuShell.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/lib/Xm/MenuShell.c b/lib/Xm/MenuShell.c
index 483cc95a..1dea4a54 100644
--- a/lib/Xm/MenuShell.c
+++ b/lib/Xm/MenuShell.c
@@ -41,6 +41,7 @@ static char rcsid[] = "$TOG: MenuShell.c /main/24 1999/07/08 16:49:59 vipin $"
#include <Xm/LabelP.h>
#include <Xm/LayoutT.h>
#include <Xm/MenuT.h>
+#include <Xm/ScreenP.h>
#include <Xm/SpecRenderT.h>
#include <Xm/TraitP.h>
#include <Xm/TransltnsP.h>
@@ -913,7 +914,7 @@ ForceMenuPaneOnScreen(
register Position *y )
{
Position rightEdgeOfMenu, bottomEdgeOfMenu;
- Dimension dispWidth, dispHeight;
+ Position dispX, dispY, dispMaxX, dispMaxY;
Widget pulldown_button = RC_CascadeBtn(rowcol);
Dimension RowColBorderWidth = rowcol->core.border_width << 1;
Dimension CascadeBorderWidth = 0;
@@ -925,8 +926,7 @@ ForceMenuPaneOnScreen(
rightEdgeOfMenu = *x + RowColBorderWidth + rowcol->core.width;
bottomEdgeOfMenu = *y + RowColBorderWidth + rowcol->core.height;
- dispWidth = WidthOfScreen (XtScreen(rowcol));
- dispHeight = HeightOfScreen (XtScreen(rowcol));
+ _XmScreenGetBoundariesAtpoint(XtScreen(rowcol), *x, *y, &dispX, &dispY, &dispMaxX, &dispMaxY);
/*
* For OPTION menus, if the submenu is [partially] offscreen, offset it
@@ -937,9 +937,9 @@ ForceMenuPaneOnScreen(
(RC_Type(XtParent(pulldown_button)) == XmMENU_OPTION))
{
Position old_x = *x;
- if (bottomEdgeOfMenu >= (Position)dispHeight)
+ if (bottomEdgeOfMenu >= dispMaxY)
{
- *y = dispHeight - rowcol->core.height - RowColBorderWidth - 1;
+ *y = dispMaxY - rowcol->core.height - RowColBorderWidth - 1;
if (LayoutIsRtoLM(rowcol))
*x = old_x - rowcol->core.width - (rowcol->core.border_width <<1);
else
@@ -948,9 +948,9 @@ ForceMenuPaneOnScreen(
bottomEdgeOfMenu = *y + RowColBorderWidth + rowcol->core.height;
}
- if (*y < 0)
+ if (*y < dispY)
{
- *y = 0;
+ *y = dispY;
/* Consider CascadeBtn as well as RowCol width to allow multi
* column RowColumn
@@ -963,13 +963,13 @@ ForceMenuPaneOnScreen(
bottomEdgeOfMenu = *y + RowColBorderWidth + rowcol->core.height;
}
- if (rightEdgeOfMenu >= (Position)dispWidth)
+ if (rightEdgeOfMenu >= dispMaxX)
{
*x = old_x - rowcol->core.width + RowColBorderWidth;
rightEdgeOfMenu = *x + RowColBorderWidth + rowcol->core.width;
}
- if (*x < 0)
+ if (*x < dispX)
{
if (LayoutIsRtoLM(rowcol))
*x = old_x + pulldown_button->core.width + CascadeBorderWidth;
@@ -982,10 +982,10 @@ ForceMenuPaneOnScreen(
/*
* If the submenu is offscreen force it completely on.
*/
- if (rightEdgeOfMenu >= (Position)dispWidth)
- *x -= (rightEdgeOfMenu - dispWidth + 1);
+ if (rightEdgeOfMenu >= dispMaxX)
+ *x -= (rightEdgeOfMenu - dispMaxX + 1);
- if (bottomEdgeOfMenu >= (Position)dispHeight)
+ if (bottomEdgeOfMenu >= dispMaxY)
{
if (pulldown_button && XtParent(pulldown_button) &&
(RC_Type(XtParent(pulldown_button)) == XmMENU_BAR))
@@ -1005,15 +1005,15 @@ ForceMenuPaneOnScreen(
*y = y_temp;
}
else
- *y -= (bottomEdgeOfMenu - dispHeight + 1);
+ *y -= (bottomEdgeOfMenu - dispMaxY + 1);
}
/* Make sure that the top left corner os on screen! */
- if (*x < 0)
- *x = 0;
+ if (*x < dispX)
+ *x = dispX;
- if (*y < 0)
- *y = 0;
+ if (*y < dispY)
+ *y = dispY;
}
/*
--
2.47.1

View File

@ -1,65 +0,0 @@
From e21e7ffaa62df64be305326d24eca09c80129403 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 21 Nov 2024 14:11:11 +0100
Subject: [PATCH 4/7] Xm/DropDown: Use Xinerama for placement
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/DropDown.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/lib/Xm/DropDown.c b/lib/Xm/DropDown.c
index a25d1092..665e0e26 100644
--- a/lib/Xm/DropDown.c
+++ b/lib/Xm/DropDown.c
@@ -13,7 +13,7 @@
#include "XmI.h"
#include <Xm/VaSimpleP.h>
#include <Xm/DrawP.h>
-
+#include <Xm/ScreenP.h>
#include <Xm/DropDownP.h>
#include <X11/Shell.h>
@@ -2169,8 +2169,9 @@ PopupList(Widget w)
XmDropDownWidget cbw = (XmDropDownWidget) w;
Widget shell = XmDropDown_popup_shell(cbw);
Position x, y, temp;
+ Position dispX, dispY, dispMaxX, dispMaxY;
Dimension width;
- int ret, scr_width, scr_height;
+ int ret;
Arg args[10];
Cardinal num_args;
@@ -2209,21 +2210,20 @@ PopupList(Widget w)
*
* Lets start by getting the width and height of the screen.
*/
- scr_width = WidthOfScreen(XtScreen(shell));
- scr_height = HeightOfScreen(XtScreen(shell));
+ _XmScreenGetBoundariesAtpoint(XtScreen(shell), x, y, &dispX, &dispY, &dispMaxX, &dispMaxY);
- if( (int)(y + XtHeight(shell)) > scr_height )
+ if( (int)(y + XtHeight(shell)) > dispMaxY )
{
Position tmp;
XtTranslateCoords(w, 0, 0, &tmp, &y);
y -= ((int)XtHeight(shell));
}
- if( y < 0 ) y = 0;
- if( (int)(x + width) > scr_width )
+ if( y < dispY ) y = dispY;
+ if( (int)(x + width) > dispMaxX )
{
- x = scr_width - ((int)width);
+ x = dispMaxX - ((int)width);
}
- if( x < 0 ) x = 0;
+ if( x < dispX ) x = dispX;
XtSetArg(args[num_args], XmNx, x); num_args++;
XtSetArg(args[num_args], XmNy, y); num_args++;
--
2.47.1

View File

@ -1,70 +0,0 @@
From d97abbe6cf64a8bb0e331725c36caf5e0ac37b0f Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 21 Nov 2024 14:17:21 +0100
Subject: [PATCH 5/7] Xm/RCMenu: Use Xinerama for placement
Please note that when building with Xinerama enabled, the placement
logic changes, as the original location of the CascadeButton is not
taken into account when relocating the RCMenu widget.
Reason for that is because I reckon the current code is not correct, as
it moves the RCMenu way off the screen, yet it doesn't show without
Xinerama because there is another check later to make sure the widget
remains on the overall screen, hence hiding the problem.
With Xinerama, that breaks in-between monitors and the RCMenu ends up
completely misplaced, which is why I think the code was wrong, yet the
logic is preserved when building without XINERAMA support to preserve
the current behavior if needed.
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/RCMenu.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/lib/Xm/RCMenu.c b/lib/Xm/RCMenu.c
index 2c698d4f..abd7a70e 100644
--- a/lib/Xm/RCMenu.c
+++ b/lib/Xm/RCMenu.c
@@ -537,6 +537,7 @@ LocatePulldown(
XEvent *event )
{
Position x, y, x1, y1;
+ Position dispX, dispMaxX;
if (root == NULL)
return;
@@ -617,17 +618,26 @@ LocatePulldown(
* window co-ords.
*/
XtTranslateCoords( (Widget) p, x, y, &x1, &y1);
+ _XmScreenGetBoundariesAtpoint(XtScreen(m), x1, y1, &dispX, NULL, &dispMaxX, NULL);
/* Oh no! we're going off screen. Let's try and do
something reasonable. We're only doing the cascade
off a menu case for now. (CR 6421) */
- if ((x1 + XtWidth(m)) > WidthOfScreen(XtScreen(m))) {
+ if ((x1 + XtWidth(m)) > dispMaxX) {
if (!IsOption(root) && (XmIsCascadeButton(p) || XmIsCascadeButtonGadget(p))) {
- x1 -= XtWidth(m) + x - XtX(p);
+ x1 -= XtWidth(m) + x;
+#ifndef HAVE_LIBXINERAMA
+ /* XXX: I don't think it's correct, but that's what the original code was doing… */
+ x1 -= XtX(p);
+#endif /* not HAVE_LIBXINERAMA */
}
- } else if (x1 < 0) { /* R to L case */
+ } else if (x1 < dispX) { /* R to L case */
if (!IsOption(root) && (XmIsCascadeButton(p) || XmIsCascadeButtonGadget(p))) {
- x1 += XtWidth(m) + x - XtX(p);
+ x1 += XtWidth(m) + x;
+#ifndef HAVE_LIBXINERAMA
+ /* XXX: I don't think it's correct, but that's what the original code was doing… */
+ x1 -= XtX(p);
+#endif /* not HAVE_LIBXINERAMA */
}
}
--
2.47.1

View File

@ -1,53 +0,0 @@
From af453aebd8e53a32369c792cf8d0e641b2b3a834 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 21 Nov 2024 14:24:30 +0100
Subject: [PATCH 6/7] Xm/Tooltip: Use Xinerama for placement
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/ToolTip.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/lib/Xm/ToolTip.c b/lib/Xm/ToolTip.c
index dc65071d..fdd32221 100644
--- a/lib/Xm/ToolTip.c
+++ b/lib/Xm/ToolTip.c
@@ -29,6 +29,7 @@
#include <Xm/VendorSEP.h>
#include <Xm/GadgetP.h>
#include <Xm/SlideC.h>
+#include <Xm/ScreenP.h>
#include <Xm/TraitP.h>
#include <Xm/ToolTipCT.h>
#include <Xm/ToolTipT.h>
@@ -153,6 +154,8 @@ ToolTipPost (XtPointer client_data,
XtWidgetGeometry geo;
Position destX,
destY;
+ Position dispMaxX,
+ dispMaxY;
XmToolTipConfigTrait ttp; /* ToolTip pointer */
@@ -197,12 +200,14 @@ ToolTipPost (XtPointer client_data,
Don't let the tip be off the right/bottom of the screen
*/
destX = rx + (XmIsGadget (w) ? XtX (w) : 0) - x + XtWidth (w) / 2;
- if (destX + geo.width > WidthOfScreen (XtScreen (w)))
+ destY = ry + (XmIsGadget (w) ? XtY (w) : 0) - y + XtHeight (w);
+ _XmScreenGetBoundariesAtpoint(XtScreen(w), destX, destY, NULL, NULL, &dispMaxX, &dispMaxY);
+
+ if (destX + geo.width > dispMaxX)
{
- destX = WidthOfScreen (XtScreen (w)) - geo.width;
+ destX = dispMaxX - geo.width;
}
- destY = ry + (XmIsGadget (w) ? XtY (w) : 0) - y + XtHeight (w);
- if (destY + geo.height > HeightOfScreen (XtScreen (w)))
+ if (destY + geo.height > dispMaxY)
{
destY = ry + (XmIsGadget (w) ? XtY (w) : 0) - y - geo.height;
}
--
2.47.1

View File

@ -1,51 +0,0 @@
From 8a026c2d1e94ab2a33a1bec55d703b229ce9daf7 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 21 Nov 2024 14:30:23 +0100
Subject: [PATCH 7/7] Xm/ComboBox: Use Xinerama for placement
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/ComboBox.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/lib/Xm/ComboBox.c b/lib/Xm/ComboBox.c
index 1472e458..0f49de50 100644
--- a/lib/Xm/ComboBox.c
+++ b/lib/Xm/ComboBox.c
@@ -43,6 +43,7 @@
#include <Xm/DisplayP.h>
#include <Xm/DrawP.h>
#include <Xm/GrabShellP.h>
+#include <Xm/ScreenP.h>
#include <Xm/List.h>
#include <Xm/TextF.h>
#include <Xm/TraitP.h>
@@ -1791,6 +1792,7 @@ CBDropDownList(Widget widget,
Cardinal n;
int tmp;
Position root_x, root_y, shell_x, shell_y;
+ Position dispX, dispY, dispMaxX, dispMaxY;
Dimension shell_width;
XtTranslateCoords((Widget)cb, XtX(cb), XtY(cb), &root_x, &root_y);
@@ -1801,12 +1803,13 @@ CBDropDownList(Widget widget,
XtY(cb);
/* Try to position the shell on the screen. */
- tmp = WidthOfScreen(XtScreen(cb)) - XtWidth(CB_ListShell(cb));
+ _XmScreenGetBoundariesAtpoint(XtScreen(cb), shell_x, shell_y, &dispX, &dispY, &dispMaxX, &dispMaxY);
+ tmp = dispMaxX - XtWidth(CB_ListShell(cb));
tmp = MIN(tmp, shell_x);
- shell_x = MAX(0, tmp);
- tmp = HeightOfScreen(XtScreen(cb)) - XtHeight(CB_ListShell(cb));
+ shell_x = MAX(dispX, tmp);
+ tmp = dispMaxY - XtHeight(CB_ListShell(cb));
tmp = MIN(tmp, shell_y);
- shell_y = MAX(0, tmp);
+ shell_y = MAX(dispY, tmp);
/* CR 8446: The shell width may have changed unexpectedly. */
shell_width = XtWidth(cb) - 2 * CB_HighlightThickness(cb);
--
2.47.1

View File

@ -1,815 +0,0 @@
From 4783fb4cec8624311bb87b2eb4a2ac94a5c7d849 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20=C5=A0abata?= <contyk@redhat.com>
Date: Thu, 8 Jun 2017 12:12:04 +0200
Subject: [PATCH] Fix issues with -Werror=format-security
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Petr Å abata <contyk@redhat.com>
---
lib/Mrm/Mrmhier.c | 4 +-
lib/Mrm/Mrmicon.c | 4 +-
lib/Mrm/Mrmlread.c | 2 +-
lib/Mrm/Mrmwcrw.c | 4 +-
tools/wml/wmldbcreate.c | 2 +-
tools/wml/wmlouth.c | 128 ++++++++++++++++++++++++------------------------
tools/wml/wmloutkey.c | 10 ++--
tools/wml/wmloutmm.c | 16 +++---
tools/wml/wmlresolve.c | 26 +++++-----
9 files changed, 98 insertions(+), 98 deletions(-)
diff --git a/lib/Mrm/Mrmhier.c b/lib/Mrm/Mrmhier.c
index 2712742..2a8703c 100644
--- a/lib/Mrm/Mrmhier.c
+++ b/lib/Mrm/Mrmhier.c
@@ -264,10 +264,10 @@ Urm__OpenHierarchy (MrmCount num_files,
case MrmSUCCESS:
break;
case MrmNOT_VALID:
- sprintf (err_stg, _MrmMMsg_0113);
+ sprintf (err_stg, "%s", _MrmMMsg_0113);
break;
default:
- sprintf (err_stg, _MrmMMsg_0114);
+ sprintf (err_stg, "%s", _MrmMMsg_0114);
break;
}
}
diff --git a/lib/Mrm/Mrmicon.c b/lib/Mrm/Mrmicon.c
index 95d4086..191e2d2 100644
--- a/lib/Mrm/Mrmicon.c
+++ b/lib/Mrm/Mrmicon.c
@@ -1176,7 +1176,7 @@ Urm__RealizeColorTable (Screen *screen,
}
break;
default:
- sprintf(err_msg, _MrmMMsg_0040);
+ sprintf(err_msg, "%s", _MrmMMsg_0040);
return Urm__UT_Error ("Urm__RelizeColorTable",
err_msg, NULL, NULL, MrmFAILURE) ;
}
@@ -1252,7 +1252,7 @@ Urm__RealizeColorTable (Screen *screen,
break;
default:
result = MrmFAILURE;
- sprintf (err_msg, _MrmMMsg_0040);
+ sprintf (err_msg, "%s", _MrmMMsg_0040);
Urm__UT_Error ("Urm__RelizeColorTable",
err_msg, NULL, NULL, MrmFAILURE) ;
}
diff --git a/lib/Mrm/Mrmlread.c b/lib/Mrm/Mrmlread.c
index c2fd94c..be433a3 100644
--- a/lib/Mrm/Mrmlread.c
+++ b/lib/Mrm/Mrmlread.c
@@ -698,7 +698,7 @@ MrmFetchColorLiteral (MrmHierarchy hierarchy_id,
XBlackPixelOfScreen(XDefaultScreenOfDisplay(display)));
break;
default:
- sprintf(err_msg, _MrmMMsg_0040);
+ sprintf(err_msg, "%s", _MrmMMsg_0040);
result = Urm__UT_Error ("MrmFetchColorLiteral",
err_msg, NULL, NULL, MrmFAILURE) ;
_MrmAppUnlock(app);
diff --git a/lib/Mrm/Mrmwcrw.c b/lib/Mrm/Mrmwcrw.c
index fe3db52..3c5857f 100644
--- a/lib/Mrm/Mrmwcrw.c
+++ b/lib/Mrm/Mrmwcrw.c
@@ -1390,7 +1390,7 @@ Urm__CW_CreateArglist (Widget parent,
}
break;
default:
- sprintf (err_msg, _MrmMMsg_0040);
+ sprintf (err_msg, "%s", _MrmMMsg_0040);
result = Urm__UT_Error ("Urm__CW_ConvertValue",
err_msg, NULL, NULL, MrmFAILURE) ;
};
@@ -2426,7 +2426,7 @@ Urm__CW_ConvertValue (Widget parent,
}
break;
default:
- sprintf(err_msg, _MrmMMsg_0040);
+ sprintf(err_msg, "%s", _MrmMMsg_0040);
return Urm__UT_Error ("Urm__CW_ConvertValue",
err_msg, NULL, NULL, MrmFAILURE) ;
};
diff --git a/tools/wml/wmldbcreate.c b/tools/wml/wmldbcreate.c
index 07c0a3c..6de585a 100644
--- a/tools/wml/wmldbcreate.c
+++ b/tools/wml/wmldbcreate.c
@@ -425,7 +425,7 @@ int table_id;
{
fprintf (afile, "%d, ", entry_vec[j]);
}
- fprintf (afile, "\n");
+ fprintf (afile, "%s", "\n");
}
}
}
diff --git a/tools/wml/wmlouth.c b/tools/wml/wmlouth.c
index d2330e3..a52843f 100644
--- a/tools/wml/wmlouth.c
+++ b/tools/wml/wmlouth.c
@@ -225,12 +225,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymGen.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Write the sym_k..._object literals
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
{
clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
@@ -244,7 +244,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
/*
* Define the sym_k_..._reason literals
*/
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_reason_ptr->hvec[ndx].objptr;
@@ -258,7 +258,7 @@ for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
/*
* Define the sym_k_..._arg literals
*/
-fprintf (outfil, canned4);
+fprintf (outfil, "%s", canned4);
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
@@ -272,7 +272,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
/*
* Define the sym_k_..._enumset structs and literals
*/
-fprintf (outfil, canned5);
+fprintf (outfil, "%s", canned5);
for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
{
enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr;
@@ -286,7 +286,7 @@ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
/*
* Define the sym_k_..._enumval literals
*/
-fprintf (outfil, canned6);
+fprintf (outfil, "%s", canned6);
for ( ndx=0 ; ndx<wml_obj_enumval_ptr->cnt ; ndx++ )
{
enumvalobj = (WmlEnumValueDefPtr) wml_obj_enumval_ptr->hvec[ndx].objptr;
@@ -301,7 +301,7 @@ for ( ndx=0 ; ndx<wml_obj_enumval_ptr->cnt ; ndx++ )
* Define the sym_k_..._charsize literals
* Define the sym_k_..._charset literals
*/
-fprintf (outfil, canned7);
+fprintf (outfil, "%s", canned7);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
charsetobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
@@ -315,7 +315,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Define the sym_k_..._child literals
*/
-fprintf (outfil, canned8);
+fprintf (outfil, "%s", canned8);
for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
{
childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[ndx].objptr;
@@ -379,12 +379,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymChCL.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Create table entries, similar to writing sym_k...
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
{
childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[ndx].objptr;
@@ -392,7 +392,7 @@ for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
fprintf (outfil, " sym_k_%s_object,\n",
classobj->tkname);
}
-fprintf (outfil, canned1a);
+fprintf (outfil, "%s", canned1a);
/*
* close the output file
@@ -446,12 +446,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymArTy.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Create table entries, similar to writing sym_k...
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
@@ -459,7 +459,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
fprintf (outfil, " sym_k_%s_value,\n",
datobj->tkname);
}
-fprintf (outfil, canned1a);
+fprintf (outfil, "%s", canned1a);
/*
* close the output file
@@ -509,19 +509,19 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymRArg.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Create table entries, similar to writing sym_k...
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
fprintf (outfil, " %d,\n",
resobj->related_code);
}
-fprintf (outfil, canned1a);
+fprintf (outfil, "%s", canned1a);
/*
* close the output file
@@ -621,12 +621,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilUrmClas.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Write entries for widgets
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
{
clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
@@ -637,7 +637,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
else
fprintf (outfil, " \"%s\",\t\n", synobj->convfunc);
}
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
/*
* Write entries for gadget variants of widget classes
@@ -661,7 +661,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
synobj->name);
}
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* Write entries for non-dialog widgets
@@ -685,7 +685,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
synobj->name);
}
}
-fprintf (outfil, canned4);
+fprintf (outfil, "%s", canned4);
/*
* Write entries for the resource a widget's controls map to
@@ -701,7 +701,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
else
fprintf (outfil, " sym_k_%s_arg,\n", mapresobj->tkname);
}
-fprintf (outfil, canned5);
+fprintf (outfil, "%s", canned5);
/*
* Write entries for arguments
@@ -714,7 +714,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
fprintf (outfil, " %s,\n",
synres->resliteral);
}
-fprintf (outfil, canned6);
+fprintf (outfil, "%s", canned6);
/*
* Write entries for reasons
@@ -727,7 +727,7 @@ for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
fprintf (outfil, " %s,\n",
synres->resliteral);
}
-fprintf (outfil, canned7);
+fprintf (outfil, "%s", canned7);
/*
* close the output file
@@ -781,13 +781,13 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilConst.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Process the arguments in code order. We start with 1, and write out
* the mask after processing 8 codes.
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
strcpy (maskbuf, "0");
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
{
@@ -805,7 +805,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
}
if ( bitno != 8 )
fprintf (outfil, "%s", maskbuf);
-fprintf (outfil, canned1a);
+fprintf (outfil, "%s", canned1a);
/*
* close the output file
@@ -878,8 +878,8 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymReas.h");
return;
}
-fprintf (outfil, canned_warn);
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned_warn);
+fprintf (outfil, "%s", canned1);
/*
* Generate the bit vectors for each class. Outer loop on the reason code,
@@ -919,19 +919,19 @@ for ( resndx=0 ; resndx<wml_obj_reason_ptr->cnt ; resndx++ )
if ( itemno != 0 )
fprintf (outfil, "%s 0};\n", maskbuf);
else
- fprintf (outfil, "};\n");
+ fprintf (outfil, "%s", "};\n");
}
/*
* Write the vector of vectors.
*/
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
for ( resndx=0 ; resndx<wml_obj_reason_ptr->cnt ; resndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_reason_ptr->hvec[resndx].objptr;
fprintf (outfil, " reason_class_vec%d,\n", resobj->sym_code);
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* close the output file
@@ -1004,8 +1004,8 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymArTa.h");
return;
}
-fprintf (outfil, canned_warn);
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned_warn);
+fprintf (outfil, "%s", canned1);
/*
* Generate the bit vectors for each class. Outer loop on the argument code,
@@ -1045,19 +1045,19 @@ for ( resndx=0 ; resndx<wml_obj_arg_ptr->cnt ; resndx++ )
if ( itemno != 0 )
fprintf (outfil, "%s 0};\n", maskbuf);
else
- fprintf (outfil, "};\n");
+ fprintf (outfil, "%s", "};\n");
}
/*
* Write the vector of vectors.
*/
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
for ( resndx=0 ; resndx<wml_obj_arg_ptr->cnt ; resndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[resndx].objptr;
fprintf (outfil, " arg_class_vec%d,\n", resobj->sym_code);
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* close the output file
@@ -1129,8 +1129,8 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymChTa.h");
return;
}
-fprintf (outfil, canned_warn);
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned_warn);
+fprintf (outfil, "%s", canned1);
/*
* Generate the bit vectors for each class. Outer loop on the child code,
@@ -1168,19 +1168,19 @@ for ( childndx=0 ; childndx<wml_obj_child_ptr->cnt ; childndx++ )
if ( itemno != 0 )
fprintf (outfil, "%s 0};\n", maskbuf);
else
- fprintf (outfil, "};\n");
+ fprintf (outfil, "%s", "};\n");
}
/*
* Write the vector of vectors.
*/
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
for ( childndx=0 ; childndx<wml_obj_child_ptr->cnt ; childndx++ )
{
childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[childndx].objptr;
fprintf (outfil, " child_class_vec%d,\n", childobj->sym_code);
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* close the output file
@@ -1251,8 +1251,8 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymCtl.h");
return;
}
-fprintf (outfil, canned_warn);
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned_warn);
+fprintf (outfil, "%s", canned1);
/*
* Generate the bit vectors for each class. Outer loop on the class code,
@@ -1290,19 +1290,19 @@ for ( ctlndx=0 ; ctlndx<wml_obj_class_ptr->cnt ; ctlndx++ )
if ( itemno != 0 )
fprintf (outfil, "%s 0};\n", maskbuf);
else
- fprintf (outfil, "};\n");
+ fprintf (outfil, "%s", "};\n");
}
/*
* Write the vector of vectors.
*/
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
for ( ctlndx=0 ; ctlndx<wml_obj_class_ptr->cnt ; ctlndx++ )
{
clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ctlndx].objptr;
fprintf (outfil, " object_class_vec%d,\n", clsobj->sym_code);
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* close the output file
@@ -1438,7 +1438,7 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymNam.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Write entries for widgets
@@ -1517,7 +1517,7 @@ for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
fprintf (outfil, " \"%s\",\n",
synch->name);
}
-fprintf (outfil, canned7);
+fprintf (outfil, "%s", canned7);
/*
* close the output file
@@ -1621,12 +1621,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymEnum.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Generate the enumeration value vectors for each enumeration set.
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
{
enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr;
@@ -1637,13 +1637,13 @@ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
fprintf (outfil, " %d,\n",
evobj->sym_code);
}
- fprintf (outfil, " };\n");
+ fprintf (outfil, "%s", " };\n");
}
/*
* Generate the enumeration set tables
*/
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
{
enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr;
@@ -1655,7 +1655,7 @@ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
/*
* Create enumset table entries for arguments, similar to writing sym_k...
*/
-fprintf (outfil, canned4);
+fprintf (outfil, "%s", canned4);
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
@@ -1669,13 +1669,13 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
/*
* Create the enumval values table.
*/
-fprintf (outfil, canned5);
+fprintf (outfil, "%s", canned5);
for ( ndx=0 ; ndx<wml_obj_enumval_ptr->cnt ; ndx++ )
{
evobj = (WmlEnumValueDefPtr) wml_obj_enumval_ptr->hvec[ndx].objptr;
fprintf (outfil, " %s,\n", evobj->syndef->enumlit);
}
-fprintf (outfil, canned5a);
+fprintf (outfil, "%s", canned5a);
/*
* close the output file
@@ -1813,12 +1813,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymCSet.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Generate the standards name table
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
@@ -1836,7 +1836,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Generate the writing direction table
*/
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
@@ -1858,7 +1858,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Generate the parsing direction table
*/
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
@@ -1880,7 +1880,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Generate the character size table
*/
-fprintf (outfil, canned4);
+fprintf (outfil, "%s", canned4);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
@@ -1906,7 +1906,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Generate the $LANG name recognition table
*/
-fprintf (outfil, canned5);
+fprintf (outfil, "%s", canned5);
lang_max = 0;
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
@@ -1936,7 +1936,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Generate the $LANG code lookup table, in upper case
*/
-fprintf (outfil, canned6);
+fprintf (outfil, "%s", canned6);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
diff --git a/tools/wml/wmloutkey.c b/tools/wml/wmloutkey.c
index af42f22..4c14728 100644
--- a/tools/wml/wmloutkey.c
+++ b/tools/wml/wmloutkey.c
@@ -574,16 +574,16 @@ if ( outfil == NULL )
printf ("\nCouldn't open UilKeyTab.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Print the case sensitive and insensitive tables
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
wmlOutputUilKeyTabBody (outfil, wml_tok_sens_ptr, &maxlen, &maxkey);
fprintf (outfil, canned2, maxlen, maxkey);
wmlOutputUilKeyTabBody (outfil, wml_tok_insens_ptr, &maxlen, &maxkey);
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* close the output file
@@ -812,8 +812,8 @@ if ( outfil == NULL )
printf ("\nCouldn't open UilTokName.h");
return;
}
-fprintf (outfil, canned_warn);
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned_warn);
+fprintf (outfil, "%s", canned1);
/*
* Print the token name entries
diff --git a/tools/wml/wmloutmm.c b/tools/wml/wmloutmm.c
index 84a97bb..dc8ec09 100644
--- a/tools/wml/wmloutmm.c
+++ b/tools/wml/wmloutmm.c
@@ -209,9 +209,9 @@ int ctlndx; /* to access ordered vector */
/*
* Write out header information
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
fprintf (outfil, "%s\n", name);
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
/*
* Alphabetize the controls, reason, and argument lists
@@ -264,7 +264,7 @@ while ( ctlref != NULL )
rsnndx = 0;
ctlndx = 0;
if ( mm_ctl_ptr->cnt == 0 )
- fprintf (outfil, "No children are supported");
+ fprintf (outfil, "%s", "No children are supported");
while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
{
if ( ctlndx < mm_ctl_ptr->cnt )
@@ -275,7 +275,7 @@ while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
ctlndx += 1;
}
else
- fprintf (outfil, "@");
+ fprintf (outfil, "%s", "@");
if ( rsnndx < mm_rsn_ptr->cnt )
{
@@ -285,9 +285,9 @@ while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
rsnndx += 1;
}
else
- fprintf (outfil, "\n");
+ fprintf (outfil, "%s", "\n");
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* Write out the argument table
@@ -319,11 +319,11 @@ while ( argndx < mm_arg_ptr->cnt )
argref->act_resource->syndef->dflt);
}
else
- fprintf (outfil, " \n");
+ fprintf (outfil, "%s", " \n");
}
argndx += 1;
}
-fprintf (outfil, canned4);
+fprintf (outfil, "%s", canned4);
}
diff --git a/tools/wml/wmlresolve.c b/tools/wml/wmlresolve.c
index 464ef29..3b8642c 100644
--- a/tools/wml/wmlresolve.c
+++ b/tools/wml/wmlresolve.c
@@ -1340,7 +1340,7 @@ for ( ndx=0 ; ndx<wml_obj_allclass_ptr->cnt ; ndx++ )
/*
* close the output file
*/
-fprintf (outfil, "\n\n");
+fprintf (outfil, "%s", "\n\n");
printf ("\nCreated report file wml.report");
fclose (outfil);
@@ -1369,14 +1369,14 @@ fprintf (outfil, "\n\n\nClass %s:", synobj->name);
switch ( synobj->type )
{
case WmlClassTypeMetaclass:
- fprintf (outfil, "\n Type: Metaclass\t");
+ fprintf (outfil, "%s", "\n Type: Metaclass\t");
if ( synobj->superclass != NULL )
fprintf (outfil, "Superclass: %s\t", synobj->superclass);
if ( synobj->parentclass != NULL )
fprintf (outfil, "Parentclass: %s\t", synobj->parentclass);
break;
case WmlClassTypeWidget:
- fprintf (outfil, "\n Type: Widget\t");
+ fprintf (outfil, "%s", "\n Type: Widget\t");
if ( synobj->superclass != NULL )