py/vstr.c: Allow vstr_printf to print correctly to a fixed buffer.
This patch allows vstr_printf to use all the available space of a fixed vstr buffer. vstr_printf is a good alternative to snprintf.
This commit is contained in:
parent
c1a77a0c9f
commit
1c9a499135
@ -244,8 +244,8 @@ void vstr_add_strn(vstr_t *vstr, const char *str, size_t len) {
|
|||||||
if (vstr->had_error || !vstr_ensure_extra(vstr, len)) {
|
if (vstr->had_error || !vstr_ensure_extra(vstr, len)) {
|
||||||
// if buf is fixed, we got here because there isn't enough room left
|
// if buf is fixed, we got here because there isn't enough room left
|
||||||
// so just try to copy as much as we can, with room for a possible null byte
|
// so just try to copy as much as we can, with room for a possible null byte
|
||||||
if (vstr->fixed_buf && vstr->len + 1 < vstr->alloc) {
|
if (vstr->fixed_buf && vstr->len < vstr->alloc) {
|
||||||
len = vstr->alloc - vstr->len - 1;
|
len = vstr->alloc - vstr->len;
|
||||||
goto copy;
|
goto copy;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -325,10 +325,6 @@ void vstr_printf(vstr_t *vstr, const char *fmt, ...) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void vstr_vprintf(vstr_t *vstr, const char *fmt, va_list ap) {
|
void vstr_vprintf(vstr_t *vstr, const char *fmt, va_list ap) {
|
||||||
if (vstr->had_error || !vstr_ensure_extra(vstr, strlen(fmt))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mp_print_t print = {vstr, (mp_print_strn_t)vstr_add_strn};
|
mp_print_t print = {vstr, (mp_print_strn_t)vstr_add_strn};
|
||||||
mp_vprintf(&print, fmt, ap);
|
mp_vprintf(&print, fmt, ap);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user