exec 3>lib/symfiles.tmp 4<lib/symfiles.tmp
rm -f lib/symfiles.tmp
- shared_modules='lock tls snprintf vsnprintf'
+ shared_modules='lock tls snprintf'
set x --extract-recursive-dependencies $shared_modules; shift
(set -x; $GNULIB/gnulib-tool "$@" >&3 ) || die "gnulib-tool failed"
shared_modules=`LC_ALL=C sort -u <&4`
# mbswidth \
# readline \
# snprintf \
-# tls \
-# vsnprintf
+# tls
# Specification in the form of a few gnulib-tool.m4 macro invocations:
gl_LOCAL_DIR([])
readline
snprintf
tls
- vsnprintf
])
gl_AVOID([gperf std-gnu11])
gl_SOURCE_BASE([lib])
}
#endif
-void cdecl__err(unsigned code, const char *fmt, ...);
+void cdecl__err(unsigned code, const char *fmt, const char *arg);
void cdecl__errmsg(unsigned msg);
struct cdecl_declspec *cdecl__normalize_specs(struct cdecl_declspec *specs);
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
-#include <string.h>
#include <assert.h>
-#include <stdarg.h>
#include "cdecl.h"
#include "cdecl-internal.h"
}
/*
- * Sets the library error to code, with a printf-style error string.
+ * Sets the library error to code; fmt is a printf-style string that may use
+ * up to one %s directive, to refer to arg.
*/
-void cdecl__err(unsigned code, const char *fmt, ...)
+void cdecl__err(unsigned code, const char *fmt, const char *arg)
{
struct err_state *state;
int rc, try = 0;
- va_list ap;
state = get_err_state();
if (!state)
return;
retry:
- va_start(ap, fmt);
- rc = vsnprintf(state->str, state->nstr, fmt, ap);
- va_end(ap);
-
+ rc = snprintf(state->str, state->nstr, fmt, arg);
if (rc > 0 && rc >= state->nstr) {
assert(try++ == 0 && rc < SIZE_MAX / 4);
state = alloc_err_state(state, (size_t)(rc+1u) * 3 / 2);
memset(work2, 'X', len - 1);
tap_diag("cdecl__err w/ %lu-byte string", (unsigned long)len);
- cdecl__err(1234, work1);
+ cdecl__err(1234, work1, "");
memset(work1, 0, len);
err = cdecl_get_error();