refactor(hmpl): fix warnings
This commit is contained in:
@@ -154,14 +154,15 @@ char* arena_strdup__(const char *file, int line, Arena *arena, const char *s) {
|
||||
|
||||
char* arena_repstr__(const char *file, int line, Arena *arena,
|
||||
const char *src, size_t start, size_t len, const char *rep) {
|
||||
int src_len = strlen(src);
|
||||
int rep_len = strlen(rep);
|
||||
int new_len = src_len - (int)len + rep_len;
|
||||
char *new_str = (char*)arena_alloc__(file, line, arena, new_len + 1);
|
||||
memcpy(new_str, src, start);
|
||||
memcpy(new_str + start, rep, rep_len);
|
||||
strcpy(new_str + start + rep_len, src + start + len);
|
||||
return new_str;
|
||||
raise_message(LOG_LEVEL_TRACE, file, line, "arena_repstr__(%p, %p, %zu, \"%s\")", src, start, len, rep);
|
||||
int src_len = strlen(src);
|
||||
int rep_len = strlen(rep);
|
||||
int new_len = src_len - (int)len + rep_len;
|
||||
char *new_str = (char*)arena_alloc__(file, line, arena, new_len + 1);
|
||||
memcpy(new_str, src, start);
|
||||
memcpy(new_str + start, rep, rep_len);
|
||||
strcpy(new_str + start + rep_len, src + start + len);
|
||||
return new_str;
|
||||
}
|
||||
|
||||
void* arena_realloc_copy__(const char *file, int line, Arena *arena,
|
||||
@@ -183,18 +184,31 @@ void* arena_realloc_copy__(const char *file, int line, Arena *arena,
|
||||
// -- misc --
|
||||
// ----------
|
||||
|
||||
void substr_clone(const char *src, char *dest, size_t start, size_t len) {
|
||||
raise_debug("substr_cloneing %s (%p) from %p to %zu", src, src, start, len);
|
||||
void substr_clone__(const char *file, int line, const char * const src, char *dest, size_t from, size_t len) {
|
||||
// Log function entry with all parameters.
|
||||
raise_message(LOG_LEVEL_TRACE, file, line,
|
||||
"substr_cloning(src=\"%s\", src_ptr=%p, dest=%p, from=%zu, len=%zu)",
|
||||
src, src, dest, from, len);
|
||||
|
||||
size_t srclen = strlen(src);
|
||||
if (start >= srclen) {
|
||||
if (from >= srclen) {
|
||||
// Log warning with context when 'from' is out of range.
|
||||
raise_message(LOG_LEVEL_WARN, file, line,
|
||||
"Invalid 'from' index (%zu): exceeds source length (%zu)",
|
||||
from, srclen);
|
||||
dest[0] = '\0';
|
||||
return;
|
||||
}
|
||||
if (start + len > srclen)
|
||||
len = srclen - start;
|
||||
strncpy(dest, src + start, len);
|
||||
if (from + len > srclen)
|
||||
len = srclen - from;
|
||||
|
||||
strncpy(dest, src + from, len);
|
||||
dest[len] = '\0';
|
||||
raise_trace("%s", dest);
|
||||
|
||||
// Log success message with result.
|
||||
raise_message(LOG_LEVEL_TRACE, file, line,
|
||||
"Completed substr_cloning: result=\"%s\", copied_length=%zu",
|
||||
dest, len);
|
||||
}
|
||||
|
||||
// ----------
|
||||
@@ -202,7 +216,7 @@ void substr_clone(const char *src, char *dest, size_t start, size_t len) {
|
||||
// ----------
|
||||
|
||||
/* Utility: Skip whitespace */
|
||||
static const char *json_skip_whitespace(const char *s) {
|
||||
static const char *skip_whitespace(const char *s) {
|
||||
while (*s && isspace((unsigned char)*s))
|
||||
s++;
|
||||
return s;
|
||||
@@ -243,7 +257,7 @@ static Json *json_parse_value__(const char **s, Arena *arena);
|
||||
static Json *json_parse_array__(const char **s, Arena *arena) {
|
||||
if (**s != '[') return NULL;
|
||||
(*s)++; // skip '['
|
||||
*s = json_skip_whitespace(*s);
|
||||
*s = skip_whitespace(*s);
|
||||
Json *array = arena_alloc(arena, sizeof(Json));
|
||||
if (!array) return NULL;
|
||||
memset(array, 0, sizeof(Json));
|
||||
@@ -262,10 +276,10 @@ static Json *json_parse_array__(const char **s, Arena *arena) {
|
||||
last->next = element;
|
||||
}
|
||||
last = element;
|
||||
*s = json_skip_whitespace(*s);
|
||||
*s = skip_whitespace(*s);
|
||||
if (**s == ',') {
|
||||
(*s)++;
|
||||
*s = json_skip_whitespace(*s);
|
||||
*s = skip_whitespace(*s);
|
||||
} else if (**s == ']') {
|
||||
(*s)++;
|
||||
break;
|
||||
@@ -280,7 +294,7 @@ static Json *json_parse_array__(const char **s, Arena *arena) {
|
||||
static Json *json_parse_object__(const char **s, Arena *arena) {
|
||||
if (**s != '{') return NULL;
|
||||
(*s)++; // skip '{'
|
||||
*s = json_skip_whitespace(*s);
|
||||
*s = skip_whitespace(*s);
|
||||
Json *object = arena_alloc(arena, sizeof(Json));
|
||||
if (!object) return NULL;
|
||||
memset(object, 0, sizeof(Json));
|
||||
@@ -293,10 +307,10 @@ static Json *json_parse_object__(const char **s, Arena *arena) {
|
||||
while (**s) {
|
||||
char *key = json_parse_string__(s, arena);
|
||||
if (!key) return NULL;
|
||||
*s = json_skip_whitespace(*s);
|
||||
*s = skip_whitespace(*s);
|
||||
if (**s != ':') return NULL;
|
||||
(*s)++; // skip ':'
|
||||
*s = json_skip_whitespace(*s);
|
||||
*s = skip_whitespace(*s);
|
||||
Json *value = json_parse_value__(s, arena);
|
||||
if (!value) return NULL;
|
||||
value->key = key; // assign key to the value
|
||||
@@ -306,10 +320,10 @@ static Json *json_parse_object__(const char **s, Arena *arena) {
|
||||
last->next = value;
|
||||
}
|
||||
last = value;
|
||||
*s = json_skip_whitespace(*s);
|
||||
*s = skip_whitespace(*s);
|
||||
if (**s == ',') {
|
||||
(*s)++;
|
||||
*s = json_skip_whitespace(*s);
|
||||
*s = skip_whitespace(*s);
|
||||
} else if (**s == '}') {
|
||||
(*s)++;
|
||||
break;
|
||||
@@ -322,7 +336,7 @@ static Json *json_parse_object__(const char **s, Arena *arena) {
|
||||
|
||||
/* Full JSON value parser */
|
||||
static Json *json_parse_value__(const char **s, Arena *arena) {
|
||||
*s = json_skip_whitespace(*s);
|
||||
*s = skip_whitespace(*s);
|
||||
if (**s == '"') {
|
||||
Json *item = arena_alloc(arena, sizeof(Json));
|
||||
if (!item) return NULL;
|
||||
@@ -423,7 +437,7 @@ char *json_to_string_with_opts(Arena *arena, const Json * const item, JsonRawOpt
|
||||
}
|
||||
|
||||
/* Retrieve an object item by key (case-sensitive) */
|
||||
Json *json_get_object_item(Json *object, const char *key) {
|
||||
Json *json_get_object_item(const Json * const object, const char * const key) {
|
||||
raise_debug("json get object item for %s", key);
|
||||
if (!object || object->type != JSON_OBJECT)
|
||||
return NULL;
|
||||
|
||||
@@ -76,19 +76,59 @@ typedef enum {
|
||||
|
||||
void logger_level_reset();
|
||||
|
||||
void init_logger(void);
|
||||
|
||||
void logger_level(LogLevel level);
|
||||
|
||||
LogLevel log_level_from_string(const char *level_str);
|
||||
|
||||
char* raise_message(LogLevel level, const char *file, int line, const char *format, ...);
|
||||
|
||||
#define raise_trace(fmt, ...) raise_message(LOG_LEVEL_TRACE, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
|
||||
#define raise_debug(fmt, ...) raise_message(LOG_LEVEL_DEBUG, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
|
||||
#define raise_log(fmt, ...) raise_message(LOG_LEVEL_LOG, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
|
||||
#define raise_info(fmt, ...) raise_message(LOG_LEVEL_INFO, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
|
||||
#define raise_notice(fmt, ...) raise_message(LOG_LEVEL_NOTICE, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
|
||||
#define raise_warn(fmt, ...) raise_message(LOG_LEVEL_WARN, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
|
||||
#define raise_exception(fmt, ...) raise_message(LOG_LEVEL_EXCEPTION, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
|
||||
#ifndef PRECOMPILED_LOG_LEVEL
|
||||
#define PRECOMPILED_LOG_LEVEL LOG_LEVEL_TRACE // default level
|
||||
#endif
|
||||
|
||||
#if PRECOMPILED_LOG_LEVEL > LOG_LEVEL_TRACE
|
||||
#define raise_trace(...) ((void)0) // log removed at compile time
|
||||
#else
|
||||
#define raise_trace(...) raise_message(LOG_LEVEL_TRACE, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if PRECOMPILED_LOG_LEVEL > LOG_LEVEL_DEBUG
|
||||
#define raise_debug(...) ((void)0)
|
||||
#else
|
||||
#define raise_debug(...) raise_message(LOG_LEVEL_DEBUG, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if PRECOMPILED_LOG_LEVEL > LOG_LEVEL_LOG
|
||||
#define raise_log(...) ((void)0)
|
||||
#else
|
||||
#define raise_log(...) raise_message(LOG_LEVEL_LOG, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if PRECOMPILED_LOG_LEVEL > LOG_LEVEL_INFO
|
||||
#define raise_info(...) ((void)0)
|
||||
#else
|
||||
#define raise_info(...) raise_message(LOG_LEVEL_INFO, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if PRECOMPILED_LOG_LEVEL > LOG_LEVEL_NOTICE
|
||||
#define raise_notice(...) ((void)0)
|
||||
#else
|
||||
#define raise_notice(...) raise_message(LOG_LEVEL_NOTICE, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if PRECOMPILED_LOG_LEVEL > LOG_LEVEL_WARN
|
||||
#define raise_warn(...) ((void)0)
|
||||
#else
|
||||
#define raise_warn(...) raise_message(LOG_LEVEL_WARN, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if PRECOMPILED_LOG_LEVEL > LOG_LEVEL_EXCEPTION
|
||||
#define raise_exception(...) ((void)0)
|
||||
#else
|
||||
#define raise_exception(...) raise_message(LOG_LEVEL_EXCEPTION, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
// -----------
|
||||
// -- arena --
|
||||
@@ -162,6 +202,9 @@ void* arena_realloc_copy__(const char *file, int line, Arena *arena,
|
||||
#define MEM_RiB (MEM_YiB * 1024)
|
||||
#define MEM_QiB (MEM_RiB * 1024)
|
||||
|
||||
void substr_clone__(const char *file, int line, const char * const src, char *dest, size_t from, size_t len);
|
||||
#define substr_clone(src, dest, from, len) substr_clone__(__FILE__, __LINE__, src, dest, from, len)
|
||||
|
||||
// ----------
|
||||
// -- Json --
|
||||
// ----------
|
||||
@@ -200,6 +243,6 @@ char *json_to_string(Arena *arena, const Json * const item);
|
||||
char *json_to_string_with_opts(Arena *arena, const Json * const item, JsonRawOpt raw);
|
||||
|
||||
/* Retrieve an object item by key (case-sensitive) */
|
||||
Json *json_get_object_item(Json *object, const char *key);
|
||||
Json *json_get_object_item(const Json * const object, const char * const key);
|
||||
|
||||
#endif // EPRINTF_H
|
||||
|
||||
Reference in New Issue
Block a user