Module: Mesa Branch: main Commit: 751e919c33542c324f90915f4f7545290c5c78ed URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=751e919c33542c324f90915f4f7545290c5c78ed
Author: Lionel Landwerlin <[email protected]> Date: Thu Oct 19 15:49:22 2023 +0300 util/u_printf: add a u_printf_ptr() variant Taking an array of pointer to u_printf_info. Signed-off-by: Lionel Landwerlin <[email protected]> Reviewed-by: Karol Herbst <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26505> --- src/util/u_printf.c | 22 +++++++++++++++++++--- src/util/u_printf.h | 3 +++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/util/u_printf.c b/src/util/u_printf.c index c9c8053f2c9..10ea682d6ad 100644 --- a/src/util/u_printf.c +++ b/src/util/u_printf.c @@ -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); +} diff --git a/src/util/u_printf.h b/src/util/u_printf.h index d0f6b4dabf8..b1b5a0d2299 100644 --- a/src/util/u_printf.h +++ b/src/util/u_printf.h @@ -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
