diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/strings.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/nvim/strings.c b/src/nvim/strings.c index da203cc9bd..c4592001b3 100644 --- a/src/nvim/strings.c +++ b/src/nvim/strings.c @@ -1083,26 +1083,20 @@ int vim_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap, // when zero value is formatted with an explicit precision 0, // resulting formatted string is empty (d, i, u, b, B, o, x, X, p) } else { - // construct a simple format string for snprintf - char f[] = "%" PRIdMAX; - f[sizeof("%" PRIdMAX) - 1 - 1] = fmt_spec; - switch (fmt_spec) { - case 'p': { + case 'p': { // pointer str_arg_l += (size_t)snprintf(tmp + str_arg_l, sizeof(tmp) - str_arg_l, - f, ptr_arg); + "%p", ptr_arg); break; } - case 'd': { - // signed + case 'd': { // signed str_arg_l += (size_t)snprintf(tmp + str_arg_l, sizeof(tmp) - str_arg_l, - f, arg); + "%" PRIdMAX, arg); break; } - case 'b': case 'B': { - // binary + case 'b': case 'B': { // binary size_t bits = 0; for (bits = sizeof(uintmax_t) * 8; bits > 0; bits--) { if ((uarg >> (bits - 1)) & 0x1) { @@ -1115,8 +1109,11 @@ int vim_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap, } break; } - default: { - // unsigned + default: { // unsigned + // construct a simple format string for snprintf + char f[] = "%" PRIuMAX; + f[sizeof("%" PRIuMAX) - 1 - 1] = fmt_spec; + assert(PRIuMAX[sizeof(PRIuMAX) - 1 - 1] == 'u'); str_arg_l += (size_t)snprintf(tmp + str_arg_l, sizeof(tmp) - str_arg_l, f, uarg); |