glib r6781 - in trunk: . docs/reference docs/reference/glib docs/reference/glib/tmpl glib



Author: matthiasc
Date: Mon Mar 31 05:17:22 2008
New Revision: 6781
URL: http://svn.gnome.org/viewvc/glib?rev=6781&view=rev

Log:
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.




Modified:
   trunk/ChangeLog
   trunk/docs/reference/ChangeLog
   trunk/docs/reference/glib/glib-sections.txt
   trunk/docs/reference/glib/tmpl/macros_misc.sgml
   trunk/glib/gmacros.h
   trunk/glib/gmem.h
   trunk/glib/gslice.h
   trunk/glib/gstrfuncs.h

Modified: trunk/docs/reference/glib/glib-sections.txt
==============================================================================
--- trunk/docs/reference/glib/glib-sections.txt	(original)
+++ trunk/docs/reference/glib/glib-sections.txt	Mon Mar 31 05:17:22 2008
@@ -324,6 +324,8 @@
 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

Modified: trunk/docs/reference/glib/tmpl/macros_misc.sgml
==============================================================================
--- trunk/docs/reference/glib/tmpl/macros_misc.sgml	(original)
+++ trunk/docs/reference/glib/tmpl/macros_misc.sgml	Mon Mar 31 05:17:22 2008
@@ -141,17 +141,44 @@
 
 <!-- ##### 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 

Modified: trunk/glib/gmacros.h
==============================================================================
--- trunk/glib/gmacros.h	(original)
+++ trunk/glib/gmacros.h	Mon Mar 31 05:17:22 2008
@@ -67,6 +67,14 @@
 #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)))

Modified: trunk/glib/gmem.h
==============================================================================
--- trunk/glib/gmem.h	(original)
+++ trunk/glib/gmem.h	Mon Mar 31 05:17:22 2008
@@ -48,13 +48,13 @@
 
 /* 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;
 

Modified: trunk/glib/gslice.h
==============================================================================
--- trunk/glib/gslice.h	(original)
+++ trunk/glib/gslice.h	Mon Mar 31 05:17:22 2008
@@ -34,10 +34,10 @@
 
 /* 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,

Modified: trunk/glib/gstrfuncs.h
==============================================================================
--- trunk/glib/gstrfuncs.h	(original)
+++ trunk/glib/gstrfuncs.h	Mon Mar 31 05:17:22 2008
@@ -218,7 +218,7 @@
 					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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]