diff options
author | Drew DeVault <sir@cmpwn.com> | 2017-06-21 12:10:07 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2017-06-21 12:10:07 -0400 |
commit | f4453d104dcf0742af0949225cada72a6cc65d05 (patch) | |
tree | c9d447041a1057641221bd3e53958de4f28e4c87 /include/wlr/util | |
parent | fd91244e8356f1fded735fae8f67d15efaccf6be (diff) |
Reorganize wlr-common
Diffstat (limited to 'include/wlr/util')
-rw-r--r-- | include/wlr/util/list.h | 31 | ||||
-rw-r--r-- | include/wlr/util/log.h | 39 |
2 files changed, 70 insertions, 0 deletions
diff --git a/include/wlr/util/list.h b/include/wlr/util/list.h new file mode 100644 index 00000000..c82fbf7a --- /dev/null +++ b/include/wlr/util/list.h @@ -0,0 +1,31 @@ +#ifndef _WLR_UTIL_LIST_H +#define _WLR_UTIL_LIST_H + +#include <stddef.h> + +typedef struct { + size_t capacity; + size_t length; + void **items; +} list_t; + +list_t *list_create(void); +void list_free(list_t *list); +void list_foreach(list_t *list, void (*callback)(void* item)); +void list_add(list_t *list, void *item); +void list_push(list_t *list, void *item); +void list_insert(list_t *list, size_t index, void *item); +void list_del(list_t *list, size_t index); +void *list_pop(list_t *list); +void *list_peek(list_t *list); +void list_cat(list_t *list, list_t *source); +// See qsort. Remember to use *_qsort functions as compare functions, +// because they dereference the left and right arguments first! +void list_qsort(list_t *list, int compare(const void *left, const void *right)); +// Return index for first item in list that returns 0 for given compare +// function or -1 if none matches. +int list_seq_find(list_t *list, + int compare(const void *item, const void *cmp_to), + const void *cmp_to); + +#endif diff --git a/include/wlr/util/log.h b/include/wlr/util/log.h new file mode 100644 index 00000000..2acaa2ed --- /dev/null +++ b/include/wlr/util/log.h @@ -0,0 +1,39 @@ +#ifndef _WLR_UTIL_LOG_H +#define _WLR_UTIL_LOG_H +#include <stdbool.h> +#include <stdarg.h> +#include <string.h> +#include <errno.h> + +typedef enum { + L_SILENT = 0, + L_ERROR = 1, + L_INFO = 2, + L_DEBUG = 3, + L_LAST, +} log_importance_t; + +typedef void (*log_callback_t)(log_importance_t importance, const char *fmt, va_list args); + +void wlr_init_log(log_callback_t callback); + +#ifdef __GNUC__ +#define ATTRIB_PRINTF(start, end) __attribute__((format(printf, start, end))) +#else +#define ATTRIB_PRINTF(start, end) +#endif + +void _wlr_log(log_importance_t verbosity, const char *format, ...) ATTRIB_PRINTF(2, 3); +void _wlr_vlog(log_importance_t verbosity, const char *format, va_list args) ATTRIB_PRINTF(2, 0); +const char *_strip_path(const char *filepath); + +#define wlr_log(verb, fmt, ...) \ + _wlr_log(verb, "[%s:%d] " fmt, _strip_path(__FILE__), __LINE__, ##__VA_ARGS__) + +#define wlr_vlog(verb, fmt, args) \ + _wlr_vlog(verb, "[%s:%d] " fmt, _strip_path(__FILE__), __LINE__, args) + +#define wlr_log_errno(verb, fmt, ...) \ + wlr_log(verb, fmt ": %s", ##__VA_ARGS__, strerror(errno)) + +#endif |