~ubuntu-branches/ubuntu/trusty/postfix/trusty-updates

« back to all changes in this revision

Viewing changes to src/util/netstring.c

  • Committer: Package Import Robot
  • Author(s): LaMont Jones, LaMont Jones, localization folks
  • Date: 2014-02-11 07:44:30 UTC
  • mfrom: (58.1.1 sid)
  • Revision ID: package-import@ubuntu.com-20140211074430-kwkoxdz0fbajn0fj
Tags: 2.11.0-1
[LaMont Jones]

* New upstream release: 2.11.0

[localization folks]

* l10n: Updated German translations.  Closes: #734893 (Helge Kreutzmann)

Show diffs side-by-side

added added

removed removed

Lines of Context:
164
164
#include <msg.h>
165
165
#include <vstream.h>
166
166
#include <vstring.h>
 
167
#include <compat_va_copy.h>
167
168
#include <netstring.h>
168
169
 
169
170
/* Application-specific. */
291
292
    char   *data;
292
293
    ssize_t data_len;
293
294
    va_list ap;
 
295
    va_list ap2;
 
296
 
 
297
    /*
 
298
     * Initialize argument lists.
 
299
     */
 
300
    va_start(ap, stream);
 
301
    VA_COPY(ap2, ap);
294
302
 
295
303
    /*
296
304
     * Figure out the total result size.
297
305
     */
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);
302
309
    va_end(ap);
303
 
 
304
 
    /*
305
 
     * Debugging support.
306
 
     */
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);
313
 
        va_end(ap);
314
 
    }
 
310
    if (total < 0)
 
311
        msg_panic("%s: bad total length %ld", myname, (long) total);
 
312
    if (msg_verbose > 1)
 
313
        msg_info("%s: write total length %ld", myname, (long) total);
315
314
 
316
315
    /*
317
316
     * Send the length, content and terminator.
318
317
     */
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);
323
 
        if (data_len > 0)
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);
 
321
        if (msg_verbose > 1)
 
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);
327
328
    }
328
 
    va_end(ap);
 
329
    va_end(ap2);
329
330
    vstream_fwrite(stream, ",", 1);
330
331
}
331
332