Pacify GCC in pgtkselect malloc alignment
This is a better fix for Bug#76414. * src/pgtkselect.c (pgtk_nalloc): New function. (pgtk_get_window_property, lisp_data_to_selection_data): Use it.
This commit is contained in:
parent
07bbfea901
commit
76342efe9d
1 changed files with 16 additions and 8 deletions
|
@ -57,6 +57,17 @@ static void lisp_data_to_selection_data (struct pgtk_display_info *, Lisp_Object
|
|||
static Lisp_Object pgtk_get_local_selection (Lisp_Object, Lisp_Object,
|
||||
bool, struct pgtk_display_info *);
|
||||
|
||||
/* Allocate an array of NITEMS items, each of positive size ITEM_SIZE.
|
||||
Make room for an extra byte at the end, as GDK sometimes needs that. */
|
||||
|
||||
static void *
|
||||
pgtk_nalloc (ptrdiff_t nitems, ptrdiff_t item_size)
|
||||
{
|
||||
/* To pacify gcc --Wanalyzer-allocation-size, make room for an extra
|
||||
item at the end instead of just the extra byte GDK sometimes needs. */
|
||||
return xnmalloc (nitems + 1, item_size);
|
||||
}
|
||||
|
||||
/* From a Lisp_Object, return a suitable frame for selection
|
||||
operations. OBJECT may be a frame, a terminal object, or nil
|
||||
(which stands for the selected frame--or, if that is not an pgtk
|
||||
|
@ -1129,7 +1140,7 @@ pgtk_get_window_property (GdkWindow *window, unsigned char **data_ret,
|
|||
eassert (actual_format == 32);
|
||||
|
||||
length = length / sizeof (GdkAtom);
|
||||
xdata = xmalloc (sizeof (GdkAtom) * length + 1);
|
||||
xdata = pgtk_nalloc (length, sizeof (GdkAtom));
|
||||
memcpy (xdata, data, 1 + length * sizeof (GdkAtom));
|
||||
|
||||
g_free (data);
|
||||
|
@ -1145,10 +1156,7 @@ pgtk_get_window_property (GdkWindow *window, unsigned char **data_ret,
|
|||
|
||||
element_size = pgtk_size_for_format (actual_format);
|
||||
length = length / element_size;
|
||||
|
||||
/* Add an extra byte on the end. GDK guarantees that it is
|
||||
NULL. */
|
||||
xdata = xmalloc (1 + element_size * length);
|
||||
xdata = pgtk_nalloc (length, element_size);
|
||||
memcpy (xdata, data, 1 + element_size * length);
|
||||
|
||||
if (actual_format == 32 && LONG_WIDTH > 32)
|
||||
|
@ -1437,7 +1445,7 @@ lisp_data_to_selection_data (struct pgtk_display_info *dpyinfo,
|
|||
}
|
||||
else if (SYMBOLP (obj))
|
||||
{
|
||||
void *data = xmalloc (sizeof (GdkAtom) + 1);
|
||||
void *data = pgtk_nalloc (1, sizeof (GdkAtom));
|
||||
GdkAtom *x_atom_ptr = data;
|
||||
cs->data = data;
|
||||
cs->format = 32;
|
||||
|
@ -1448,7 +1456,7 @@ lisp_data_to_selection_data (struct pgtk_display_info *dpyinfo,
|
|||
}
|
||||
else if (RANGED_FIXNUMP (SHRT_MIN, obj, SHRT_MAX))
|
||||
{
|
||||
void *data = xmalloc (sizeof (short) + 1);
|
||||
void *data = pgtk_nalloc (1, sizeof (short));
|
||||
short *short_ptr = data;
|
||||
cs->data = data;
|
||||
cs->format = 16;
|
||||
|
@ -1463,7 +1471,7 @@ lisp_data_to_selection_data (struct pgtk_display_info *dpyinfo,
|
|||
|| (CONSP (XCDR (obj))
|
||||
&& FIXNUMP (XCAR (XCDR (obj)))))))
|
||||
{
|
||||
void *data = xmalloc (sizeof (unsigned long) + 1);
|
||||
void *data = pgtk_nalloc (1, sizeof (unsigned long));
|
||||
unsigned long *x_long_ptr = data;
|
||||
cs->data = data;
|
||||
cs->format = 32;
|
||||
|
|
Loading…
Add table
Reference in a new issue