From a56cabb09ba4ad9b00d086ed0ffcc3523f77a604 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 18 Mar 2004 21:51:02 +0000 Subject: 2004-03-18 Roland McGrath * utils.c (do_skip_vfprintf): New macro. (WriteCopyType, WritePackMsgType): Use that, so we do va_start and va_end independently around each SkipVFPrintf call. --- utils.c | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) (limited to 'utils.c') diff --git a/utils.c b/utils.c index c556d1d..0f63637 100644 --- a/utils.c +++ b/utils.c @@ -370,39 +370,42 @@ SkipVFPrintf(FILE *file, register const char *fmt, va_list pvar) (void) vfprintf(file, fmt, pvar); } +#define do_skip_vfprintf(file, fmt, lastarg) do { \ + va_list ap; \ + va_start(ap, lastarg); \ + SkipVFPrintf(file, fmt, ap); \ + va_end (ap); \ +} while (0) + void WriteCopyType(FILE *file, const ipc_type_t *it, const char *left, const char *right, ...) { - va_list pvar; - va_start(pvar, right); - if (it->itStruct) { fprintf(file, "\t"); - SkipVFPrintf(file, left, pvar); + do_skip_vfprintf(file, left, right); fprintf(file, " = "); - SkipVFPrintf(file, right, pvar); + do_skip_vfprintf(file, right, right); fprintf(file, ";\n"); } else if (it->itString) { fprintf(file, "\t(void) %smig_strncpy(", SubrPrefix); - SkipVFPrintf(file, left, pvar); + do_skip_vfprintf(file, left, right); fprintf(file, ", "); - SkipVFPrintf(file, right, pvar); + do_skip_vfprintf(file, right, right); fprintf(file, ", %d);\n", it->itTypeSize); } else { fprintf(file, "\t{ typedef struct { char data[%d]; } *sp; * (sp) ", it->itTypeSize); - SkipVFPrintf(file, left, pvar); + do_skip_vfprintf(file, left, right); fprintf(file, " = * (sp) "); - SkipVFPrintf(file, right, pvar); + do_skip_vfprintf(file, right, right); fprintf(file, "; }\n"); } - va_end(pvar); } void @@ -410,14 +413,9 @@ WritePackMsgType(FILE *file, const ipc_type_t *it, dealloc_t dealloc, boolean_t longform, boolean_t inname, const char *left, const char *right, ...) { - va_list pvar; - va_start(pvar, right); - fprintf(file, "\t"); - SkipVFPrintf(file, left, pvar); + do_skip_vfprintf(file, left, right); fprintf(file, " = "); - SkipVFPrintf(file, right, pvar); + do_skip_vfprintf(file, right, right); fprintf(file, ";\n"); - - va_end(pvar); } -- cgit v1.2.3