util/u_printf: add a u_printf_ptr() variant

Taking an array of pointer to u_printf_info.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26505>
This commit is contained in:
Lionel Landwerlin 2023-10-19 15:49:22 +03:00 committed by Marge Bot
parent 3ef5149824
commit 751e919c33
2 changed files with 22 additions and 3 deletions

View file

@ -99,8 +99,11 @@ size_t u_printf_length(const char *fmt, va_list untouched_args)
return size;
}
void u_printf(FILE *out, const char *buffer, size_t buffer_size,
const u_printf_info *info, unsigned info_size)
static void
u_printf_impl(FILE *out, const char *buffer, size_t buffer_size,
const u_printf_info *info,
const u_printf_info **info_ptr,
unsigned info_size)
{
for (size_t buf_pos = 0; buf_pos < buffer_size;) {
uint32_t fmt_idx = *(uint32_t*)&buffer[buf_pos];
@ -113,7 +116,8 @@ void u_printf(FILE *out, const char *buffer, size_t buffer_size,
if (fmt_idx >= info_size)
return;
const u_printf_info *fmt = &info[fmt_idx];
const u_printf_info *fmt = info != NULL ?
&info[fmt_idx] : info_ptr[fmt_idx];
const char *format = fmt->strings;
buf_pos += sizeof(fmt_idx);
@ -232,3 +236,15 @@ void u_printf(FILE *out, const char *buffer, size_t buffer_size,
fprintf(out, "%s", format);
}
}
void u_printf(FILE *out, const char *buffer, size_t buffer_size,
const u_printf_info *info, unsigned info_size)
{
u_printf_impl(out, buffer, buffer_size, info, NULL, info_size);
}
void u_printf_ptr(FILE *out, const char *buffer, size_t buffer_size,
const u_printf_info **info, unsigned info_size)
{
u_printf_impl(out, buffer, buffer_size, NULL, info, info_size);
}

View file

@ -49,6 +49,9 @@ size_t u_printf_length(const char *fmt, va_list untouched_args);
void u_printf(FILE *out, const char *buffer, size_t buffer_size,
const u_printf_info*, unsigned info_size);
void u_printf_ptr(FILE *out, const char *buffer, size_t buffer_size,
const u_printf_info **info, unsigned info_size);
#ifdef __cplusplus
}
#endif