/* * DWN - Desktop Window Manager * retoor * Utility functions */ #ifndef DWN_UTIL_H #define DWN_UTIL_H #include #include #include #include #define DWN_ASSERT(cond) assert(cond) #define DWN_ASSERT_MSG(cond, msg) assert((cond) && (msg)) typedef enum { LOG_DEBUG, LOG_INFO, LOG_WARN, LOG_ERROR } LogLevel; void log_init(const char *log_file); void log_close(void); void log_set_level(LogLevel level); void log_flush(void); void log_msg(LogLevel level, const char *fmt, ...); #define LOG_DEBUG(...) log_msg(LOG_DEBUG, __VA_ARGS__) #define LOG_INFO(...) log_msg(LOG_INFO, __VA_ARGS__) #define LOG_WARN(...) log_msg(LOG_WARN, __VA_ARGS__) #define LOG_ERROR(...) log_msg(LOG_ERROR, __VA_ARGS__) void *dwn_malloc(size_t size); void *dwn_calloc(size_t nmemb, size_t size); void *dwn_realloc(void *ptr, size_t size); char *dwn_strdup(const char *s); void dwn_free(void *ptr); void secure_wipe(void *ptr, size_t size); char *str_trim(char *str); bool str_starts_with(const char *str, const char *prefix); bool str_ends_with(const char *str, const char *suffix); int str_split(char *str, char delim, char **parts, int max_parts); char *shell_escape(const char *str); bool file_exists(const char *path); char *file_read_all(const char *path); bool file_write_all(const char *path, const char *content); char *expand_path(const char *path); unsigned long parse_color(const char *color_str); void color_to_rgb(unsigned long color, int *r, int *g, int *b); long get_time_ms(void); void sleep_ms(int ms); int spawn(const char *cmd); int spawn_async(const char *cmd); char *spawn_capture(const char *cmd); #endif