]> granicus.if.org Git - transmission/commitdiff
add tr_strdup_printf()
authorCharles Kerr <charles@transmissionbt.com>
Thu, 15 May 2008 15:44:51 +0000 (15:44 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Thu, 15 May 2008 15:44:51 +0000 (15:44 +0000)
libtransmission/utils.c
libtransmission/utils.h

index 5a593ee1b4c1d33dea1543d6be927f0ea33be2aa..9cf71b94172b8e4af4e49ae1158767a6185452eb 100644 (file)
@@ -602,6 +602,22 @@ tr_strndup( const char * in, int len )
     return out;
 }
 
+char*
+tr_strdup_printf( const char * fmt, ... )
+{
+    char * ret = NULL;
+    struct evbuffer * buf;
+    va_list ap;
+
+    buf = evbuffer_new( );
+    va_start( ap, fmt );
+    if( evbuffer_add_vprintf( buf, fmt, ap ) != -1 )
+        ret = tr_strdup( (char*)EVBUFFER_DATA( buf ) );
+    evbuffer_free( buf );
+
+    return ret;
+}
+
 void*
 tr_calloc( size_t nmemb, size_t size )
 {
index ebf5f937fc3a4c7b10cceb5b1683719ab95e5e00..5ace211f67bb0e428404740c8c565622a48f2375 100644 (file)
 #include <stddef.h> /* for size_t */
 #include <stdio.h> /* FILE* */
 
-void tr_msgInit( void );
+/***
+****
+***/
+
+#ifndef UNUSED
+#ifdef __GNUC__
+#define UNUSED __attribute__((unused))
+#else
+#define UNUSED
+#endif
+#endif
+
+#ifndef TR_GNUC_PRINTF
+#ifdef __GNUC__
+#define TR_GNUC_PRINTF( fmt, args ) __attribute__((format (printf, fmt, args)))
+#else
+#define TR_GNUC_PRINTF( fmt, args )
+#endif
+#endif
+
+#ifndef TR_GNUC_NULL_TERMINATED
+#if __GNUC__ >= 4
+#define TR_GNUC_NULL_TERMINATED __attribute__((__sentinel__))
+#else
+#define TR_GNUC_NULL_TERMINATED
+#endif
+#endif
+
+#ifndef TR_GNUC_NULL_TERMINATED
+#if __GNUC__ >= 4
+#define TR_GNUC_NULL_TERMINATED __attribute__((__sentinel__))
+#else
+#define TR_GNUC_NULL_TERMINATED
+#endif
+#endif
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#define TR_GNUC_PURE __attribute__((__pure__))
+#define TR_GNUC_MALLOC __attribute__((__malloc__))
+#else
+#define TR_GNUC_PURE
+#define TR_GNUC_MALLOC
+#endif
+
+
+/***
+****
+***/
 
 #if !defined(_)
 #if defined(SYS_DARWIN)
@@ -54,10 +101,18 @@ void tr_msgInit( void );
 #define tr_err( a... ) tr_msg( __FILE__, __LINE__, TR_MSG_ERR, NULL, ## a )
 #define tr_inf( a... ) tr_msg( __FILE__, __LINE__, TR_MSG_INF, NULL, ## a )
 #define tr_dbg( a... ) tr_msg( __FILE__, __LINE__, TR_MSG_DBG, NULL, ## a )
-void tr_msg  ( const char * file, int line, int level, const char * torrent, const char * fmt, ... );
+
+void tr_msgInit( void );
+
+void tr_msg( const char * file, int line,
+             int level, const char * torrent,
+             const char * fmt, ... ) TR_GNUC_PRINTF( 5, 6 );
+
 FILE* tr_getLog( void );
 
-void tr_deepLog( const char * file, int line, const char * name, const char * fmt, ... ); 
+void tr_deepLog( const char * file, int line,
+                 const char * name,
+                 const char * fmt, ... ) TR_GNUC_PRINTF( 4, 5 );
 
 char* tr_getLogTimeStr( char * buf, int buflen );
 
@@ -82,13 +137,14 @@ int tr_mkdir( const char * path, int permissions );
 int tr_mkdirp( const char * path, int permissions );
 
 
-uint8_t* tr_loadFile( const char * filename, size_t * size );
+uint8_t* tr_loadFile( const char * filename, size_t * size ) TR_GNUC_MALLOC;
 
 
 /* creates a filename from a series of elements using the
    correct separator for filenames. */
 void tr_buildPath( char* buf, size_t buflen,
-                   const char * first_element, ... );
+                   const char * first_element, ... )
+                                      TR_GNUC_NULL_TERMINATED;
 
 struct timeval tr_timevalMsec( uint64_t milliseconds );
 
@@ -127,13 +183,14 @@ void tr_wait( uint64_t delay_milliseconds );
 #define tr_renew(struct_type, mem, n_structs)    \
     ((struct_type *) realloc ((mem), ((size_t) sizeof (struct_type)) * ((size_t) (n_structs))))
 
-void* tr_malloc  ( size_t );
-void* tr_malloc0 ( size_t );
-void* tr_calloc  ( size_t nmemb, size_t size );
+void* tr_malloc  ( size_t ) TR_GNUC_MALLOC;
+void* tr_malloc0 ( size_t ) TR_GNUC_MALLOC;
+void* tr_calloc  ( size_t nmemb, size_t size ) TR_GNUC_MALLOC;
 void  tr_free    ( void* );
 
-char* tr_strdup( const char * str );
-char* tr_strndup( const char * str, int len );
+char* tr_strdup( const char * str ) TR_GNUC_MALLOC;
+char* tr_strndup( const char * str, int len ) TR_GNUC_MALLOC;
+char* tr_strdup_printf( const char * fmt, ... )  TR_GNUC_PRINTF( 1, 2 ) TR_GNUC_MALLOC;
 
 const char* tr_strerror( int );
 
@@ -180,8 +237,8 @@ struct tr_bitfield
 typedef struct tr_bitfield tr_bitfield;
 typedef struct tr_bitfield tr_bitfield_t;
 
-tr_bitfield* tr_bitfieldNew( size_t bitcount );
-tr_bitfield* tr_bitfieldDup( const tr_bitfield* );
+tr_bitfield* tr_bitfieldNew( size_t bitcount ) TR_GNUC_MALLOC;
+tr_bitfield* tr_bitfieldDup( const tr_bitfield* ) TR_GNUC_MALLOC;
 void tr_bitfieldFree( tr_bitfield*);
 
 void tr_bitfieldClear( tr_bitfield* );