292
293
ssize_t data_len;
298
* Initialize argument lists.
300
va_start(ap, stream);
296
304
* Figure out the total result size.
298
va_start(ap, stream);
299
306
for (total = 0; (data = va_arg(ap, char *)) != 0; total += data_len)
300
307
if ((data_len = va_arg(ap, ssize_t)) < 0)
301
msg_panic("netstring_put_multi: bad data length %ld", (long) data_len);
308
msg_panic("%s: bad data length %ld", myname, (long) data_len);
307
if (msg_verbose > 1) {
308
va_start(ap, stream);
309
data = va_arg(ap, char *);
310
data_len = va_arg(ap, ssize_t);
311
msg_info("%s: write netstring len %ld data %.*s",
312
myname, (long) total, (int) (data_len < 30 ? data_len : 30), data);
311
msg_panic("%s: bad total length %ld", myname, (long) total);
313
msg_info("%s: write total length %ld", myname, (long) total);
317
316
* Send the length, content and terminator.
319
318
vstream_fprintf(stream, "%ld:", (long) total);
320
va_start(ap, stream);
321
while ((data = va_arg(ap, char *)) != 0) {
322
data_len = va_arg(ap, ssize_t);
324
if (vstream_fwrite(stream, data, data_len) != data_len)
325
netstring_except(stream, vstream_ftimeout(stream) ?
326
NETSTRING_ERR_TIME : NETSTRING_ERR_EOF);
319
while ((data = va_arg(ap2, char *)) != 0) {
320
data_len = va_arg(ap2, ssize_t);
322
msg_info("%s: write netstring len %ld data %.*s",
323
myname, (long) data_len,
324
(int) (data_len < 30 ? data_len : 30), data);
325
if (vstream_fwrite(stream, data, data_len) != data_len)
326
netstring_except(stream, vstream_ftimeout(stream) ?
327
NETSTRING_ERR_TIME : NETSTRING_ERR_EOF);
329
330
vstream_fwrite(stream, ",", 1);