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:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user