Pacify -Wuseless-cast with Lucid toolkit

Problem reported by Jonathan Mitchell (bug#81554).
Also, clean up the const situation elsewhere, e.g.,
with Motif toolkit, and with no X toolkit.
* configure.ac (_CONST_X_STRING): New macro, when using X11.
This causes most X11 include files to use ‘const char *’ for
readonly strings, rather than the ‘char *’ that was needed for K&R C.
* lwlib/lwlib-Xaw.c (xaw_generic_callback):
* lwlib/lwlib.c (lw_get_widget_value_for_widget)
(lw_internal_update_other_instances):
* lwlib/xlwmenu.c (openXftFont):
* src/xdisp.c (update_redisplay_ticks):
Use char const *, not char *, for readonly strings.
* lwlib/lwlib-Xm.c (update_one_menu_entry):
A cast is needed now that XtName returns char const *,
in a context where Motif wants char *, not String.
* lwlib/xlwmenu.c (openXftFont): Put newly allocated string
into its own local variable, so that main local can be char const *.
* src/emacs.c (android_emacs_init):
* src/xterm.c (x_term_init):
Pacify both -Wuseless-cast and -Wdiscarded-qualifiers.
* src/widget.c (resources, emacsFrameClassRec):
* src/xdisp.c (update_redisplay_ticks):
* src/xfns.c (x_window):
* src/xmenu.c (create_and_show_popup_menu):
* src/xterm.c (emacs_options) [USE_X_TOOLKIT]:
Omit now-useless casts.
* src/xfns.c (Fx_file_dialog):
Use char *, not String, for a mutable string.
This commit is contained in:
Paul Eggert 2026-08-05 23:44:57 -05:00
parent 69b9bfeb01
commit 39f42a8248
11 changed files with 57 additions and 48 deletions

View file

@ -7277,6 +7277,8 @@ AC_SUBST([LIBXT_OTHER])
if test "${HAVE_X11}" = "yes" ; then
AC_DEFINE([HAVE_X11], [1],
[Define to 1 if you want to use version 11 of X windows.])
AC_DEFINE([_CONST_X_STRING], [1],
[Define to 1 for X11 headers to use the 'const' keyword of C89 or later.])
LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)"
else
LIBX_OTHER=

View file

@ -762,7 +762,7 @@ xaw_generic_callback (Widget widget, XtPointer closure, XtPointer call_data)
all instances of a button have the same call data. */
{
widget_value *val = instance->info->val->contents;
char *name = XtName (widget);
char const *name = XtName (widget);
while (val)
{
if (val->name && !strcmp (val->name, name))

View file

@ -685,7 +685,8 @@ update_one_menu_entry (widget_instance* instance,
emacs_abort ();
if (XmIsCascadeButton (widget_list[i]))
{
menu = XmCreatePulldownMenu (parent, XtName(widget), NULL, 0);
menu = XmCreatePulldownMenu (parent, (char *) XtName(widget),
NULL, 0);
make_menu_in_widget (instance, menu, contents, 0);
ac = 0;
XtSetArg (al [ac], XmNsubMenuId, menu); ac++;

View file

@ -1048,7 +1048,7 @@ lw_get_all_values (LWLIB_ID id)
widget_value*
lw_get_widget_value_for_widget (widget_instance *instance, Widget w)
{
char* name = XtName (w);
char const *name = XtName (w);
widget_value* cur;
for (cur = instance->info->val; cur; cur = cur->next)
if (!strcmp (cur->name, name))
@ -1070,7 +1070,7 @@ lw_internal_update_other_instances (Widget widget,
XtPointer call_data)
{
widget_instance* instance = (widget_instance*)closure;
char* name = XtName (widget);
char const *name = XtName (widget);
widget_info* info;
widget_instance* cur;
widget_value* val;

View file

@ -2033,7 +2033,8 @@ getDefaultXftFont (XlwMenuWidget mw)
static int
openXftFont (XlwMenuWidget mw)
{
char *fname = mw->menu.fontName;
char const *fname = mw->menu.fontName;
char *fname_minus = NULL;
mw->menu.xft_font = 0;
mw->menu.default_face = fname && strcmp (fname, DEFAULT_FONTNAME) == 0;
@ -2047,8 +2048,8 @@ openXftFont (XlwMenuWidget mw)
--i;
if (fname[i] == ' ')
{
fname = xstrdup (mw->menu.fontName);
fname[i] = '-';
fname = fname_minus = xstrdup (mw->menu.fontName);
fname_minus[i] = '-';
}
mw->menu.xft_font = XftFontOpenName (XtDisplay (mw), screen, fname);
@ -2056,7 +2057,7 @@ openXftFont (XlwMenuWidget mw)
mw->menu.xft_font = getDefaultXftFont (mw);
}
if (fname != mw->menu.fontName) xfree (fname);
xfree (fname_minus);
return mw->menu.xft_font != 0;
}

View file

@ -1707,7 +1707,8 @@ android_emacs_init (int argc, char **argv, char *dump_file)
/* Convert --script to -scriptload, un-skip it, and sort again
so that it will be handled in proper sequence. */
/* FIXME broken for --script=FILE - is that supposed to work? */
argv[skip_args - 1] = (char *) "-scriptload";
static char const scriptload_option[] = "-scriptload";
argv[skip_args - 1] = (char *) scriptload_option;
skip_args -= 2;
sort_args (argc, argv);
}
@ -2112,7 +2113,8 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
argv[count_before + 2] = displayname;
argc++;
}
argv[count_before + 1] = (char *) "-d";
static char const d_option[] = "-d";
argv[count_before + 1] = (char *) d_option;
}
#endif /* HAVE_X_WINDOWS */
@ -2130,7 +2132,8 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
noninteractive = 1;
no_site_lisp = 1;
/* This is picked up in startup.el. */
argv[skip_args - 1] = (char *) "-scripteval";
static char const scripteval_option[] = "-scripteval";
argv[skip_args - 1] = (char *) scripteval_option;;
skip_args -= 1;
sort_args (argc, argv);
}

View file

@ -54,34 +54,34 @@ static XtGeometryResult EmacsFrameQueryGeometry (Widget, XtWidgetGeometry *,
#define offset(field) offsetof (EmacsFrameRec, emacs_frame.field)
static XtResource resources[] = {
{(char *) XtNgeometry, (char *) XtCGeometry, XtRString, sizeof (String),
{XtNgeometry, XtCGeometry, XtRString, sizeof (String),
offset (geometry), XtRString, (XtPointer) 0},
{XtNiconic, XtCIconic, XtRBoolean, sizeof (Boolean),
offset (iconic), XtRImmediate, (XtPointer) False},
{(char *) XtNemacsFrame, (char *) XtCEmacsFrame,
{XtNemacsFrame, XtCEmacsFrame,
XtRPointer, sizeof (XtPointer),
offset (frame), XtRImmediate, 0},
{(char *) XtNminibuffer, (char *) XtCMinibuffer, XtRInt, sizeof (int),
{XtNminibuffer, XtCMinibuffer, XtRInt, sizeof (int),
offset (minibuffer), XtRImmediate, (XtPointer)0},
{(char *) XtNunsplittable, (char *) XtCUnsplittable,
{XtNunsplittable, XtCUnsplittable,
XtRBoolean, sizeof (Boolean),
offset (unsplittable), XtRImmediate, (XtPointer)0},
{(char *) XtNinternalBorderWidth, (char *) XtCInternalBorderWidth,
{XtNinternalBorderWidth, XtCInternalBorderWidth,
XtRInt, sizeof (int),
offset (internal_border_width), XtRImmediate, (XtPointer)4},
{(char *) XtNinterline, (char *) XtCInterline, XtRInt, sizeof (int),
{XtNinterline, XtCInterline, XtRInt, sizeof (int),
offset (interline), XtRImmediate, (XtPointer)0},
{(char *) XtNforeground, (char *) XtCForeground, XtRPixel, sizeof (Pixel),
offset (foreground_pixel), XtRString, (char *) "XtDefaultForeground"},
{(char *) XtNcursorColor, (char *) XtCForeground, XtRPixel, sizeof (Pixel),
offset (cursor_color), XtRString, (char *) "XtDefaultForeground"},
{(char *) XtNbarCursor, (char *) XtCBarCursor, XtRBoolean, sizeof (Boolean),
{XtNforeground, XtCForeground, XtRPixel, sizeof (Pixel),
offset (foreground_pixel), XtRString, "XtDefaultForeground"},
{XtNcursorColor, XtCForeground, XtRPixel, sizeof (Pixel),
offset (cursor_color), XtRString, "XtDefaultForeground"},
{XtNbarCursor, XtCBarCursor, XtRBoolean, sizeof (Boolean),
offset (bar_cursor), XtRImmediate, (XtPointer)0},
{(char *) XtNvisualBell, (char *) XtCVisualBell, XtRBoolean, sizeof (Boolean),
{XtNvisualBell, XtCVisualBell, XtRBoolean, sizeof (Boolean),
offset (visual_bell), XtRImmediate, (XtPointer)0},
{(char *) XtNbellVolume, (char *) XtCBellVolume, XtRInt, sizeof (int),
{XtNbellVolume, XtCBellVolume, XtRInt, sizeof (int),
offset (bell_volume), XtRImmediate, (XtPointer)0},
};
@ -106,7 +106,7 @@ emacsFrameTranslations [] = "\
static EmacsFrameClassRec emacsFrameClassRec = {
{ /* core fields */
/* superclass */ 0, /* filled in by emacsFrameClass */
/* class_name */ (char *) "EmacsFrame",
/* class_name */ "EmacsFrame",
/* widget_size */ sizeof (EmacsFrameRec),
/* class_initialize */ 0,
/* class_part_initialize */ 0,

View file

@ -18571,12 +18571,12 @@ update_redisplay_ticks (int ticks, struct window *w)
windows, not expected here) or nil (for pseudo-windows like
the one used for the native tool bar). */
Lisp_Object contents = w ? w->contents : Qnil;
char *bufname =
char const *bufname =
NILP (contents)
? SSDATA (BVAR (current_buffer, name))
: (BUFFERP (contents)
? SSDATA (BVAR (XBUFFER (contents), name))
: (char *) "<unknown>");
: "<unknown>");
windows_or_buffers_changed = 177;
/* scrolling_window depends too much on the glyph matrices being

View file

@ -4226,10 +4226,10 @@ x_window (struct frame *f, long window_prompting)
ac = 0;
XtSetArg (al[ac], XtNmappedWhenManaged, 0); ac++;
XtSetArg (al[ac], (char *) XtNshowGrip, 0); ac++;
XtSetArg (al[ac], (char *) XtNallowResize, 1); ac++;
XtSetArg (al[ac], (char *) XtNresizeToPreferred, 1); ac++;
XtSetArg (al[ac], (char *) XtNemacsFrame, f); ac++;
XtSetArg (al[ac], XtNshowGrip, 0); ac++;
XtSetArg (al[ac], XtNallowResize, 1); ac++;
XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++;
XtSetArg (al[ac], XtNemacsFrame, f); ac++;
XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++;
XtSetArg (al[ac], XtNdepth, FRAME_DISPLAY_INFO (f)->n_planes); ac++;
XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;
@ -9632,7 +9632,7 @@ DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0,
if (result == XmCR_OK)
{
XmString text_string;
String data;
char *data;
XtVaGetValues (dialog, XmNtextString, &text_string, NULL);
XmStringGetLtoR (text_string, XmFONTLIST_DEFAULT_TAG, &data);

View file

@ -1795,7 +1795,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv,
event->button = i;
/* Don't allow any geometry request from the user. */
XtSetArg (av[ac], (char *) XtNgeometry, 0); ac++;
XtSetArg (av[ac], XtNgeometry, 0); ac++;
XtSetValues (menu, av, ac);
#ifdef HAVE_XINPUT2

View file

@ -30455,21 +30455,21 @@ x_free_pixmap (struct frame *f, Emacs_Pixmap pixmap)
#ifdef USE_X_TOOLKIT
static XrmOptionDescRec emacs_options[] = {
{(char *) "-geometry", (char *) ".geometry", XrmoptionSepArg, NULL},
{(char *) "-iconic", (char *) ".iconic", XrmoptionNoArg, (XtPointer) "yes"},
{"-geometry", ".geometry", XrmoptionSepArg, NULL},
{"-iconic", ".iconic", XrmoptionNoArg, (XtPointer) "yes"},
{(char *) "-internal-border-width",
(char *) "*EmacsScreen.internalBorderWidth", XrmoptionSepArg, NULL},
{(char *) "-ib", (char *) "*EmacsScreen.internalBorderWidth",
{"-internal-border-width",
"*EmacsScreen.internalBorderWidth", XrmoptionSepArg, NULL},
{"-ib", "*EmacsScreen.internalBorderWidth",
XrmoptionSepArg, NULL},
{(char *) "-T", (char *) "*EmacsShell.title", XrmoptionSepArg, NULL},
{(char *) "-wn", (char *) "*EmacsShell.title", XrmoptionSepArg, NULL},
{(char *) "-title", (char *) "*EmacsShell.title", XrmoptionSepArg, NULL},
{(char *) "-iconname", (char *) "*EmacsShell.iconName",
{"-T", "*EmacsShell.title", XrmoptionSepArg, NULL},
{"-wn", "*EmacsShell.title", XrmoptionSepArg, NULL},
{"-title", "*EmacsShell.title", XrmoptionSepArg, NULL},
{"-iconname", "*EmacsShell.iconName",
XrmoptionSepArg, NULL},
{(char *) "-in", (char *) "*EmacsShell.iconName", XrmoptionSepArg, NULL},
{(char *) "-mc", (char *) "*pointerColor", XrmoptionSepArg, NULL},
{(char *) "-cr", (char *) "*cursorColor", XrmoptionSepArg, NULL}
{"-in", "*EmacsShell.iconName", XrmoptionSepArg, NULL},
{"-mc", "*pointerColor", XrmoptionSepArg, NULL},
{"-cr", "*cursorColor", XrmoptionSepArg, NULL}
};
/* Whether atimer for Xt timeouts is activated or not. */
@ -30797,11 +30797,13 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
int argc = 0;
char *argv[3];
argv[0] = (char *) "";
static char const mt[] = "";
argv[0] = (char *) mt;
argc = 1;
if (xrm_option)
{
argv[argc++] = (char *) "-xrm";
static char const xrmopt[] = "-xrm";
argv[argc++] = (char *) xrmopt;
argv[argc++] = xrm_option;
}
turn_on_atimers (false);
@ -31612,7 +31614,7 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
dpy = dpyinfo->display;
d.addr = (XPointer) &dpy;
d.size = sizeof (Display *);
fr.addr = (char *) XtDefaultFont;
fr.addr = XtDefaultFont;
fr.size = sizeof (XtDefaultFont);
to.size = sizeof (Font *);
to.addr = (XPointer) &font;