From b52164f265af00ac1aea78e0288ea5d7703d19af Mon Sep 17 00:00:00 2001 From: John Marshall Date: Mon, 7 Mar 2022 17:48:40 +0000 Subject: [PATCH] Avoid conflicting with HTSlib's kstring.c functions Make ksprintf() static inline in kstring.h, so that it (like the other bwa/kstring.h functions) won't conflict with similar HTSlib functions. Instead implement it and kvsprintf() in terms of a new bwa_kvsprintf() function. Fixes samtools/htslib#693. --- kstring.c | 12 +++++------- kstring.h | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/kstring.c b/kstring.c index 2871310e..686ae067 100644 --- a/kstring.c +++ b/kstring.c @@ -6,21 +6,19 @@ # include "malloc_wrap.h" #endif -int ksprintf(kstring_t *s, const char *fmt, ...) +int bwa_kvsprintf(kstring_t *s, const char *fmt, va_list ap) { - va_list ap; + va_list ap2; int l; - va_start(ap, fmt); + va_copy(ap2, ap); l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap); - va_end(ap); if (l + 1 > s->m - s->l) { s->m = s->l + l + 2; kroundup32(s->m); s->s = (char*)realloc(s->s, s->m); - va_start(ap, fmt); - l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap); + l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap2); } - va_end(ap); + va_end(ap2); s->l += l; return l; } diff --git a/kstring.h b/kstring.h index fe7fa95a..4b2f9443 100644 --- a/kstring.h +++ b/kstring.h @@ -3,6 +3,7 @@ #include #include +#include #ifdef USE_MALLOC_WRAPPERS # include "malloc_wrap.h" @@ -110,6 +111,21 @@ static inline int kputl(long c, kstring_t *s) return 0; } -int ksprintf(kstring_t *s, const char *fmt, ...); +int bwa_kvsprintf(kstring_t *s, const char *fmt, va_list ap); + +static inline int ksprintf(kstring_t *s, const char *fmt, ...) +{ + va_list ap; + int l; + va_start(ap, fmt); + l = bwa_kvsprintf(s, fmt, ap); + va_end(ap); + return l; +} + +static inline int kvsprintf(kstring_t *s, const char *fmt, va_list ap) +{ + return bwa_kvsprintf(s, fmt, ap); +} #endif