1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-06 17:53:13 +02:00

core: use dynamic buffer size for calls to vsnprintf

This commit is contained in:
Sebastien Helleu
2011-08-26 09:55:55 +02:00
parent c356b16322
commit ebf72c7eda
13 changed files with 190 additions and 191 deletions
+29 -1
View File
@@ -46,7 +46,7 @@ struct timeval;
*/
/* API version (used to check that plugin has same API and can be loaded) */
#define WEECHAT_PLUGIN_API_VERSION "20110820-01"
#define WEECHAT_PLUGIN_API_VERSION "20110826-01"
/* macros for defining plugin infos */
#define WEECHAT_PLUGIN_NAME(__name) \
@@ -145,6 +145,34 @@ struct timeval;
#define WEECHAT_HOOK_SIGNAL_INT "int"
#define WEECHAT_HOOK_SIGNAL_POINTER "pointer"
/* macro to format string with variable args, using dynamic buffer size */
#define weechat_va_format(__format) \
va_list argptr; \
int vaa_size, vaa_num; \
char *vbuffer, *vaa_buffer2; \
vaa_size = 1024; \
vbuffer = malloc (vaa_size); \
if (vbuffer) \
{ \
while (1) \
{ \
va_start (argptr, __format); \
vaa_num = vsnprintf (vbuffer, vaa_size, __format, argptr); \
va_end (argptr); \
if ((vaa_num >= 0) && (vaa_num < vaa_size)) \
break; \
vaa_size = (vaa_num >= 0) ? vaa_num + 1 : vaa_size * 2; \
vaa_buffer2 = realloc (vbuffer, vaa_size); \
if (!vaa_buffer2) \
{ \
free (vbuffer); \
vbuffer = NULL; \
break; \
} \
vbuffer = vaa_buffer2; \
} \
}
struct t_weechat_plugin
{
/* plugin variables */