-
- arglist_start(argp, fmt);
- vsnprintf(pkt->body, sizeof(pkt->body), fmt, argp);
- arglist_end(argp);
+ pkt->packet_size = 1000;
+ pkt->body = alloc(pkt->packet_size);
+ while(1) {
+ arglist_start(argp, fmt);
+ len = g_vsnprintf(pkt->body, pkt->packet_size, fmt, argp);
+ arglist_end(argp);
+ if (len > -1 && len < (int)(pkt->packet_size - 1))
+ break;
+ pkt->packet_size *= 2;
+ amfree(pkt->body);
+ pkt->body = alloc(pkt->packet_size);
+ }
+ pkt->size = strlen(pkt->body);