diff options
Diffstat (limited to 'src/drm/drm_util.c')
-rw-r--r-- | src/drm/drm_util.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/drm/drm_util.c b/src/drm/drm_util.c new file mode 100644 index 00000000..4f6535a8 --- /dev/null +++ b/src/drm/drm_util.c @@ -0,0 +1,48 @@ +/* + * Copyright 2022 Google LLC + * SPDX-License-Identifier: MIT + */ + +#include <stdarg.h> +#include <string.h> + +#include "drm_util.h" +#include "virgl_util.h" + +#include "util/macros.h" + +void +_drm_log(const char *fmt, ...) +{ + const char prefix[] = "drm: "; + char line[1024]; + size_t len; + va_list va; + int ret; + + len = ARRAY_SIZE(prefix) - 1; + memcpy(line, prefix, len); + + va_start(va, fmt); + ret = vsnprintf(line + len, ARRAY_SIZE(line) - len, fmt, va); + va_end(va); + + if (ret < 0) { + const char log_error[] = "log error"; + memcpy(line + len, log_error, ARRAY_SIZE(log_error) - 1); + len += ARRAY_SIZE(log_error) - 1; + } else if ((size_t)ret < ARRAY_SIZE(line) - len) { + len += ret; + } else { + len = ARRAY_SIZE(line) - 1; + } + + /* make room for newline */ + if (len + 1 >= ARRAY_SIZE(line)) + len--; + + line[len++] = '\n'; + line[len] = '\0'; + + virgl_log("%s", line); +} |