mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2025-01-21 06:01:43 +00:00
u/debug: Tidy file and export more converters
This commit is contained in:
parent
35e1346290
commit
8c8356840a
|
@ -1,4 +1,4 @@
|
||||||
// Copyright 2019-2020, Collabora, Ltd.
|
// Copyright 2019-2023, Collabora, Ltd.
|
||||||
// SPDX-License-Identifier: BSL-1.0
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
/*!
|
/*!
|
||||||
* @file
|
* @file
|
||||||
|
@ -18,193 +18,48 @@
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
DEBUG_GET_ONCE_BOOL_OPTION(print, "XRT_PRINT_OPTIONS", false)
|
DEBUG_GET_ONCE_BOOL_OPTION(print, "XRT_PRINT_OPTIONS", false)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Helpers
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
os_getenv(const char *name)
|
os_getenv(const char *name)
|
||||||
{
|
{
|
||||||
return getenv(name);
|
return getenv(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
static const char *
|
||||||
debug_get_option(const char *name, const char *_default)
|
level_to_str(enum u_logging_level level)
|
||||||
{
|
{
|
||||||
const char *raw = getenv(name);
|
switch (level) {
|
||||||
const char *ret;
|
case U_LOGGING_TRACE: return "trace";
|
||||||
|
case U_LOGGING_DEBUG: return "debug";
|
||||||
if (raw == NULL) {
|
case U_LOGGING_INFO: return "info";
|
||||||
ret = _default;
|
case U_LOGGING_WARN: return "warn";
|
||||||
} else {
|
case U_LOGGING_ERROR: return "error";
|
||||||
ret = raw;
|
default: return "invalid";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug_get_bool_option_print()) {
|
|
||||||
U_LOG_RAW("%s=%s (%s)", name, ret, raw == NULL ? "nil" : raw);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
static const char *
|
||||||
debug_string_to_bool(const char *raw)
|
tristate_to_str(enum debug_tristate_option tristate)
|
||||||
{
|
{
|
||||||
bool ret;
|
switch (tristate) {
|
||||||
if (raw == NULL) {
|
case DEBUG_TRISTATE_OFF: return "OFF";
|
||||||
ret = false;
|
case DEBUG_TRISTATE_AUTO: return "AUTO";
|
||||||
} else if (!strcmp(raw, "false")) {
|
case DEBUG_TRISTATE_ON: return "ON";
|
||||||
ret = false;
|
default: return "invalid";
|
||||||
} else if (!strcmp(raw, "FALSE")) {
|
|
||||||
ret = false;
|
|
||||||
} else if (!strcmp(raw, "off")) {
|
|
||||||
ret = false;
|
|
||||||
} else if (!strcmp(raw, "OFF")) {
|
|
||||||
ret = false;
|
|
||||||
} else if (!strcmp(raw, "no")) {
|
|
||||||
ret = false;
|
|
||||||
} else if (!strcmp(raw, "NO")) {
|
|
||||||
ret = false;
|
|
||||||
} else if (!strcmp(raw, "n")) {
|
|
||||||
ret = false;
|
|
||||||
} else if (!strcmp(raw, "N")) {
|
|
||||||
ret = false;
|
|
||||||
} else if (!strcmp(raw, "f")) {
|
|
||||||
ret = false;
|
|
||||||
} else if (!strcmp(raw, "F")) {
|
|
||||||
ret = false;
|
|
||||||
} else if (!strcmp(raw, "0")) {
|
|
||||||
ret = false;
|
|
||||||
} else {
|
|
||||||
ret = true;
|
|
||||||
}
|
}
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
debug_get_bool_option(const char *name, bool _default)
|
|
||||||
{
|
|
||||||
const char *raw = os_getenv(name);
|
|
||||||
bool ret = raw == NULL ? _default : debug_string_to_bool(raw);
|
|
||||||
|
|
||||||
if (debug_get_bool_option_print()) {
|
|
||||||
U_LOG_RAW("%s=%s (%s)", name, ret ? "TRUE" : "FALSE", raw == NULL ? "nil" : raw);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
enum debug_tristate_option
|
|
||||||
debug_string_to_tristate(const char *raw)
|
|
||||||
{
|
|
||||||
enum debug_tristate_option ret;
|
|
||||||
if (raw == NULL) {
|
|
||||||
ret = DEBUG_TRISTATE_AUTO;
|
|
||||||
} else if (!strcmp(raw, "AUTO")) {
|
|
||||||
ret = DEBUG_TRISTATE_AUTO;
|
|
||||||
} else if (!strcmp(raw, "auto")) {
|
|
||||||
ret = DEBUG_TRISTATE_AUTO;
|
|
||||||
} else if (!strcmp(raw, "a")) {
|
|
||||||
ret = DEBUG_TRISTATE_AUTO;
|
|
||||||
} else if (!strcmp(raw, "A")) {
|
|
||||||
ret = DEBUG_TRISTATE_AUTO;
|
|
||||||
} else {
|
|
||||||
bool bool_ret = debug_string_to_bool(raw);
|
|
||||||
if (bool_ret) {
|
|
||||||
ret = DEBUG_TRISTATE_ON;
|
|
||||||
} else {
|
|
||||||
ret = DEBUG_TRISTATE_OFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum debug_tristate_option
|
|
||||||
debug_get_tristate_option(const char *name)
|
|
||||||
{
|
|
||||||
const char *raw = os_getenv(name);
|
|
||||||
enum debug_tristate_option ret = debug_string_to_tristate(raw);
|
|
||||||
|
|
||||||
if (debug_get_bool_option_print()) {
|
|
||||||
const char *pretty_val;
|
|
||||||
switch (ret) {
|
|
||||||
case DEBUG_TRISTATE_OFF: {
|
|
||||||
pretty_val = "OFF";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case DEBUG_TRISTATE_AUTO: {
|
|
||||||
pretty_val = "AUTO";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case DEBUG_TRISTATE_ON: {
|
|
||||||
pretty_val = "ON";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: pretty_val = "invalid";
|
|
||||||
}
|
|
||||||
U_LOG_RAW("%s=%s (%s)", name, pretty_val, raw == NULL ? "nil" : raw);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
long
|
|
||||||
debug_string_to_num(const char *raw, long _default)
|
|
||||||
{
|
|
||||||
if (raw == NULL) {
|
|
||||||
return _default;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *endptr;
|
|
||||||
long ret = strtol(raw, &endptr, 0);
|
|
||||||
|
|
||||||
// Restore the default value when no digits were found.
|
|
||||||
if (raw == endptr) {
|
|
||||||
ret = _default;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
long
|
|
||||||
debug_get_num_option(const char *name, long _default)
|
|
||||||
{
|
|
||||||
const char *raw = os_getenv(name);
|
|
||||||
long ret = debug_string_to_num(raw, _default);
|
|
||||||
|
|
||||||
if (debug_get_bool_option_print()) {
|
|
||||||
U_LOG_RAW("%s=%li (%s)", name, ret, raw == NULL ? "nil" : raw);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
float
|
|
||||||
debug_get_float_option(const char *name, float _default)
|
|
||||||
{
|
|
||||||
const char *raw = os_getenv(name);
|
|
||||||
float ret;
|
|
||||||
|
|
||||||
if (raw == NULL) {
|
|
||||||
ret = _default;
|
|
||||||
} else {
|
|
||||||
char *endptr;
|
|
||||||
|
|
||||||
ret = strtof(raw, &endptr);
|
|
||||||
// Restore the default value when no digits were found.
|
|
||||||
if (raw == endptr) {
|
|
||||||
ret = _default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debug_get_bool_option_print()) {
|
|
||||||
U_LOG_RAW("%s=%f (%s)", name, ret, raw == NULL ? "nil" : raw);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -231,43 +86,211 @@ is_str_in_start_of(const char *str, const char *matches)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
|
||||||
level_to_str(enum u_logging_level level)
|
/*
|
||||||
|
*
|
||||||
|
* 'Exported' conversion functions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool
|
||||||
|
debug_string_to_bool(const char *string)
|
||||||
{
|
{
|
||||||
switch (level) {
|
if (string == NULL) {
|
||||||
case U_LOGGING_TRACE: return "trace";
|
return false;
|
||||||
case U_LOGGING_DEBUG: return "debug";
|
} else if (!strcmp(string, "false")) {
|
||||||
case U_LOGGING_INFO: return "info";
|
return false;
|
||||||
case U_LOGGING_WARN: return "warn";
|
} else if (!strcmp(string, "FALSE")) {
|
||||||
case U_LOGGING_ERROR: return "error";
|
return false;
|
||||||
default: return "???";
|
} else if (!strcmp(string, "off")) {
|
||||||
|
return false;
|
||||||
|
} else if (!strcmp(string, "OFF")) {
|
||||||
|
return false;
|
||||||
|
} else if (!strcmp(string, "no")) {
|
||||||
|
return false;
|
||||||
|
} else if (!strcmp(string, "NO")) {
|
||||||
|
return false;
|
||||||
|
} else if (!strcmp(string, "n")) {
|
||||||
|
return false;
|
||||||
|
} else if (!strcmp(string, "N")) {
|
||||||
|
return false;
|
||||||
|
} else if (!strcmp(string, "f")) {
|
||||||
|
return false;
|
||||||
|
} else if (!strcmp(string, "F")) {
|
||||||
|
return false;
|
||||||
|
} else if (!strcmp(string, "0")) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum debug_tristate_option
|
||||||
|
debug_string_to_tristate(const char *string)
|
||||||
|
{
|
||||||
|
if (string == NULL) {
|
||||||
|
return DEBUG_TRISTATE_AUTO;
|
||||||
|
} else if (!strcmp(string, "AUTO")) {
|
||||||
|
return DEBUG_TRISTATE_AUTO;
|
||||||
|
} else if (!strcmp(string, "auto")) {
|
||||||
|
return DEBUG_TRISTATE_AUTO;
|
||||||
|
} else if (!strcmp(string, "a")) {
|
||||||
|
return DEBUG_TRISTATE_AUTO;
|
||||||
|
} else if (!strcmp(string, "A")) {
|
||||||
|
return DEBUG_TRISTATE_AUTO;
|
||||||
|
} else {
|
||||||
|
if (debug_string_to_bool(string)) {
|
||||||
|
return DEBUG_TRISTATE_ON;
|
||||||
|
} else {
|
||||||
|
return DEBUG_TRISTATE_OFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
debug_string_to_num(const char *string, long _default)
|
||||||
|
{
|
||||||
|
if (string == NULL) {
|
||||||
|
return _default;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *endptr;
|
||||||
|
long ret = strtol(string, &endptr, 0);
|
||||||
|
|
||||||
|
// Restore the default value when no digits were found.
|
||||||
|
if (string == endptr) {
|
||||||
|
return _default;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
debug_string_to_float(const char *string, float _default)
|
||||||
|
{
|
||||||
|
if (string == NULL) {
|
||||||
|
return _default;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *endptr;
|
||||||
|
float ret = strtof(string, &endptr);
|
||||||
|
|
||||||
|
// Restore the default value when no digits were found.
|
||||||
|
if (string == endptr) {
|
||||||
|
return _default;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum u_logging_level
|
||||||
|
debug_string_to_log_level(const char *string, enum u_logging_level _default)
|
||||||
|
{
|
||||||
|
if (string == NULL) {
|
||||||
|
return _default;
|
||||||
|
} else if (is_str_in_start_of(string, "trace")) {
|
||||||
|
return U_LOGGING_TRACE;
|
||||||
|
} else if (is_str_in_start_of(string, "debug")) {
|
||||||
|
return U_LOGGING_DEBUG;
|
||||||
|
} else if (is_str_in_start_of(string, "info")) {
|
||||||
|
return U_LOGGING_INFO;
|
||||||
|
} else if (is_str_in_start_of(string, "warn")) {
|
||||||
|
return U_LOGGING_WARN;
|
||||||
|
} else if (is_str_in_start_of(string, "error")) {
|
||||||
|
return U_LOGGING_ERROR;
|
||||||
|
} else {
|
||||||
|
return _default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* 'Exported' debug value getters.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
const char *
|
||||||
|
debug_get_option(const char *name, const char *_default)
|
||||||
|
{
|
||||||
|
const char *raw = os_getenv(name);
|
||||||
|
const char *ret;
|
||||||
|
|
||||||
|
if (raw == NULL) {
|
||||||
|
ret = _default;
|
||||||
|
} else {
|
||||||
|
ret = raw;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (debug_get_bool_option_print()) {
|
||||||
|
U_LOG_RAW("%s=%s (%s)", name, ret, raw == NULL ? "nil" : raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
debug_get_bool_option(const char *name, bool _default)
|
||||||
|
{
|
||||||
|
const char *raw = os_getenv(name);
|
||||||
|
bool ret = raw == NULL ? _default : debug_string_to_bool(raw);
|
||||||
|
|
||||||
|
if (debug_get_bool_option_print()) {
|
||||||
|
U_LOG_RAW("%s=%s (%s)", name, ret ? "TRUE" : "FALSE", raw == NULL ? "nil" : raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum debug_tristate_option
|
||||||
|
debug_get_tristate_option(const char *name)
|
||||||
|
{
|
||||||
|
const char *raw = os_getenv(name);
|
||||||
|
enum debug_tristate_option ret = debug_string_to_tristate(raw);
|
||||||
|
|
||||||
|
if (debug_get_bool_option_print()) {
|
||||||
|
const char *pretty_val = tristate_to_str(ret);
|
||||||
|
U_LOG_RAW("%s=%s (%s)", name, pretty_val, raw == NULL ? "nil" : raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
debug_get_num_option(const char *name, long _default)
|
||||||
|
{
|
||||||
|
const char *raw = os_getenv(name);
|
||||||
|
long ret = debug_string_to_num(raw, _default);
|
||||||
|
|
||||||
|
if (debug_get_bool_option_print()) {
|
||||||
|
U_LOG_RAW("%s=%li (%s)", name, ret, raw == NULL ? "nil" : raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
debug_get_float_option(const char *name, float _default)
|
||||||
|
{
|
||||||
|
const char *raw = os_getenv(name);
|
||||||
|
float ret = debug_string_to_float(raw, _default);
|
||||||
|
|
||||||
|
if (debug_get_bool_option_print()) {
|
||||||
|
U_LOG_RAW("%s=%f (%s)", name, ret, raw == NULL ? "nil" : raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
enum u_logging_level
|
enum u_logging_level
|
||||||
debug_get_log_option(const char *name, enum u_logging_level _default)
|
debug_get_log_option(const char *name, enum u_logging_level _default)
|
||||||
{
|
{
|
||||||
const char *raw = os_getenv(name);
|
const char *raw = os_getenv(name);
|
||||||
enum u_logging_level ret;
|
enum u_logging_level ret = debug_string_to_log_level(raw, _default);
|
||||||
|
|
||||||
if (raw == NULL) {
|
|
||||||
ret = _default;
|
|
||||||
} else if (is_str_in_start_of(raw, "trace")) {
|
|
||||||
ret = U_LOGGING_TRACE;
|
|
||||||
} else if (is_str_in_start_of(raw, "debug")) {
|
|
||||||
ret = U_LOGGING_DEBUG;
|
|
||||||
} else if (is_str_in_start_of(raw, "info")) {
|
|
||||||
ret = U_LOGGING_INFO;
|
|
||||||
} else if (is_str_in_start_of(raw, "warn")) {
|
|
||||||
ret = U_LOGGING_WARN;
|
|
||||||
} else if (is_str_in_start_of(raw, "error")) {
|
|
||||||
ret = U_LOGGING_ERROR;
|
|
||||||
} else {
|
|
||||||
ret = _default;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debug_get_bool_option_print()) {
|
if (debug_get_bool_option_print()) {
|
||||||
U_LOG_RAW("%s=%s (%s)", name, level_to_str(ret), raw == NULL ? "nil" : raw);
|
const char *pretty_val = level_to_str(ret);
|
||||||
|
U_LOG_RAW("%s=%s (%s)", name, pretty_val, raw == NULL ? "nil" : raw);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright 2019, Collabora, Ltd.
|
// Copyright 2019-2023, Collabora, Ltd.
|
||||||
// SPDX-License-Identifier: BSL-1.0
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
/*!
|
/*!
|
||||||
* @file
|
* @file
|
||||||
|
@ -26,18 +26,44 @@ enum debug_tristate_option
|
||||||
DEBUG_TRISTATE_ON
|
DEBUG_TRISTATE_ON
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *
|
|
||||||
debug_get_option(const char *name, const char *_default);
|
/*
|
||||||
|
*
|
||||||
|
* Conversion functions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
bool
|
bool
|
||||||
debug_string_to_bool(const char *string);
|
debug_string_to_bool(const char *string);
|
||||||
|
|
||||||
enum debug_tristate_option
|
enum debug_tristate_option
|
||||||
debug_get_tristate_option(const char *name);
|
debug_string_to_tristate(const char *string);
|
||||||
|
|
||||||
|
long
|
||||||
|
debug_string_to_num(const char *string, long _default);
|
||||||
|
|
||||||
|
float
|
||||||
|
debug_string_to_float(const char *string, float _default);
|
||||||
|
|
||||||
|
enum u_logging_level
|
||||||
|
debug_string_to_log_level(const char *string, enum u_logging_level _default);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Get functions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
const char *
|
||||||
|
debug_get_option(const char *name, const char *_default);
|
||||||
|
|
||||||
bool
|
bool
|
||||||
debug_get_bool_option(const char *name, bool _default);
|
debug_get_bool_option(const char *name, bool _default);
|
||||||
|
|
||||||
|
enum debug_tristate_option
|
||||||
|
debug_get_tristate_option(const char *name);
|
||||||
|
|
||||||
long
|
long
|
||||||
debug_string_to_num(const char *string, long _default);
|
debug_string_to_num(const char *string, long _default);
|
||||||
|
|
||||||
|
@ -50,6 +76,13 @@ debug_get_float_option(const char *name, float _default);
|
||||||
enum u_logging_level
|
enum u_logging_level
|
||||||
debug_get_log_option(const char *name, enum u_logging_level _default);
|
debug_get_log_option(const char *name, enum u_logging_level _default);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Get once helpers.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
#define DEBUG_GET_ONCE_OPTION(suffix, name, _default) \
|
#define DEBUG_GET_ONCE_OPTION(suffix, name, _default) \
|
||||||
static const char *debug_get_option_##suffix(void) \
|
static const char *debug_get_option_##suffix(void) \
|
||||||
{ \
|
{ \
|
||||||
|
|
Loading…
Reference in a new issue