char * buffer = emalloc(s);
int len, n = 0;
signal(SIGPIPE, sighand_pipe);
va_start(param, data);
for(;;)
{
r = vsnprintf(buffer, s - 1, data, param);
if(r >= 0 && r < s)break;
s = r > s ? r + 2 : s * 2;