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
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);
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)
}
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;
}
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;
|| (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;