2008-03-30 Matthias Clasen <mclasen@redhat.com>
+ * glib/gmacros.h: Add macros wrapping the gcc alloc_size
+ function attribute. (#523019, Rodrigo Moya)
+
+ * glib/gmem.h:
+ * glib/gslice.h:
+ * glib/gstrfuncs.h: Use the new attribute where appropriate.
+
+2008-03-30 Matthias Clasen <mclasen@redhat.com>
+
* glib/glibintl.h:
* glib/gstrfuncs.c:
* glib/gutils.c: Simple fixes to help building GLib on
+2008-03-30 Matthias Clasen <mclasen@redhat.com>
+
+ * glib/glib-sections.txt:
+ * glib/tmpl/macros-misc.sgml: Document G_GNUC_ALLOC_SIZE
+ macros
+
2008-03-28 A. Walton <awalton@svn.gnome.org>
* gio/overview.xml:
G_GNUC_CONST
G_GNUC_PURE
G_GNUC_MALLOC
+G_GNUC_ALLOC_SIZE
+G_GNUC_ALLOC_SIZE2
G_GNUC_DEPRECATED
G_GNUC_NORETURN
G_GNUC_UNUSED
<!-- ##### MACRO G_GNUC_MALLOC ##### -->
<para>
-Expands to the GNU C <literal>malloc</literal> function attribute if the compiler is
-<command>gcc</command>. Declaring a function as malloc enables better optimization of the
-function. A function can have the malloc attribute if it returns a pointer which is guaranteed
-to not alias with any other pointer when the function returns (in practice, this means newly
-allocated memory).
+Expands to the GNU C <literal>malloc</literal> function attribute if the
+compiler is <command>gcc</command>. Declaring a function as malloc enables
+better optimization of the function. A function can have the malloc attribute
+if it returns a pointer which is guaranteed to not alias with any other pointer
+when the function returns (in practice, this means newly allocated memory).
See the GNU C documentation for details.
</para>
@Since: 2.6
+<!-- ##### MACRO G_GNUC_ALLOC_SIZE ##### -->
+<para>
+Expands to the GNU C <literal>alloc_size</literal> function attribute if the
+compiler is a new enough <command>gcc</command>. This attribute tells the
+compiler that the function returns a pointer to memory of a size that is
+specified by the @x<!-- -->th function parameter.
+See the GNU C documentation for details.
+</para>
+
+@x: the index of the argument specifying the allocation size
+@Since: 2.18
+
+
+<!-- ##### MACRO G_GNUC_ALLOC_SIZE2 ##### -->
+<para>
+Expands to the GNU C <literal>alloc_size</literal> function attribute if the
+compiler is a new enough <command>gcc</command>. This attribute tells the
+compiler that the function returns a pointer to memory of a size that is
+specified by the product of two function parameters.
+See the GNU C documentation for details.
+</para>
+
+@x: the index of the argument specifying one factor of the allocation size
+@y: the index of the argument specifying the second factor of the allocation size
+@Since: 2.18
+
+
<!-- ##### MACRO G_GNUC_DEPRECATED ##### -->
<para>
Expands to the GNU C <literal>deprecated</literal> attribute if the compiler
#define G_GNUC_NULL_TERMINATED
#endif
+#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
+#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
+#define G_GNUC_ALLOC_SIZE2(x,y) __attribute__((__alloc_size__(x,y)))
+#else
+#define G_GNUC_ALLOC_SIZE(x)
+#define G_GNUC_ALLOC_SIZE2(x,y)
+#endif
+
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
#define G_GNUC_PRINTF( format_idx, arg_idx ) \
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
/* Memory allocation functions
*/
-gpointer g_malloc (gsize n_bytes) G_GNUC_MALLOC;
-gpointer g_malloc0 (gsize n_bytes) G_GNUC_MALLOC;
+gpointer g_malloc (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
+gpointer g_malloc0 (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
gpointer g_realloc (gpointer mem,
gsize n_bytes) G_GNUC_WARN_UNUSED_RESULT;
void g_free (gpointer mem);
-gpointer g_try_malloc (gsize n_bytes) G_GNUC_MALLOC;
-gpointer g_try_malloc0 (gsize n_bytes) G_GNUC_MALLOC;
+gpointer g_try_malloc (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
+gpointer g_try_malloc0 (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
gpointer g_try_realloc (gpointer mem,
gsize n_bytes) G_GNUC_WARN_UNUSED_RESULT;
/* slices - fast allocation/release of small memory blocks
*/
-gpointer g_slice_alloc (gsize block_size) G_GNUC_MALLOC;
-gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC;
+gpointer g_slice_alloc (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
+gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
gpointer g_slice_copy (gsize block_size,
- gconstpointer mem_block) G_GNUC_MALLOC;
+ gconstpointer mem_block) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
void g_slice_free1 (gsize block_size,
gpointer mem_block);
void g_slice_free_chain_with_offset (gsize block_size,
const gchar *exceptions) G_GNUC_MALLOC;
gpointer g_memdup (gconstpointer mem,
- guint byte_size) G_GNUC_MALLOC;
+ guint byte_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(2);
/* NULL terminated string arrays.
* g_strsplit(), g_strsplit_set() split up string into max_tokens tokens