X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=i3bar%2Finclude%2Futil.h;h=1f56361106dfc97670bc412bf5d6e2ad90fb6450;hb=HEAD;hp=08bdc3356880a658bc73469a2f4ac8cb241a42a4;hpb=8595d3bb48e75d2072a2023f92d8c182a085a59c;p=i3%2Fi3 diff --git a/i3bar/include/util.h b/i3bar/include/util.h index 08bdc335..1f563611 100644 --- a/i3bar/include/util.h +++ b/i3bar/include/util.h @@ -1,34 +1,70 @@ -#ifndef UTIL_H_ -#define UTIL_H_ +/* + * vim:ts=4:sw=4:expandtab + * + * i3 - an improved dynamic tiling window manager + * © 2009 Michael Stapelberg and contributors (see also: LICENSE) + * + */ +#pragma once + +#include #include "queue.h" +/* Get the maximum/minimum of x and y */ +#undef MAX +#define MAX(x, y) ((x) > (y) ? (x) : (y)) +#undef MIN +#define MIN(x, y) ((x) < (y) ? (x) : (y)) + +#define STARTS_WITH(string, len, needle) (((len) >= strlen((needle))) && strncasecmp((string), (needle), strlen((needle))) == 0) + /* Securely free p */ -#define FREE(p) do { \ - if (p != NULL) { \ - free(p); \ +#define FREE(p) \ + do { \ + free(p); \ p = NULL; \ - } \ -} while (0) - -/* Securely fee single-linked list */ -#define FREE_SLIST(l, type) do { \ - type *walk = SLIST_FIRST(l); \ - while (!SLIST_EMPTY(l)) { \ - SLIST_REMOVE_HEAD(l, slist); \ - FREE(walk); \ - walk = SLIST_FIRST(l); \ - } \ -} while (0) + } while (0) +/* Securely free single-linked list */ +#define FREE_SLIST(l, type) \ + do { \ + type *walk = SLIST_FIRST(l); \ + while (!SLIST_EMPTY(l)) { \ + SLIST_REMOVE_HEAD(l, slist); \ + FREE(walk); \ + walk = SLIST_FIRST(l); \ + } \ + } while (0) + +/* Securely free tail queue */ +#define FREE_TAILQ(l, type) \ + do { \ + type *walk = TAILQ_FIRST(l); \ + while (!TAILQ_EMPTY(l)) { \ + TAILQ_REMOVE(l, TAILQ_FIRST(l), tailq); \ + FREE(walk); \ + walk = TAILQ_FIRST(l); \ + } \ + } while (0) + +#if defined(DLOG) +#undef DLOG #endif +/* Use cool logging macros */ +#define DLOG(fmt, ...) \ + do { \ + if (config.verbose) { \ + printf("[%s:%d] " fmt, __FILE__, __LINE__, ##__VA_ARGS__); \ + } \ + } while (0) -/* Securely fee tail-queues */ -#define FREE_TAILQ(l, type) do { \ - type *walk = TAILQ_FIRST(l); \ - while (!TAILQ_EMPTY(l)) { \ - TAILQ_REMOVE(l, TAILQ_FIRST(l), tailq); \ - FREE(walk); \ - walk = TAILQ_FIRST(l); \ - } \ -} while (0) +/* We will include libi3.h which define its own version of ELOG. + * We want *our* version, so we undef the libi3 one. */ +#if defined(ELOG) +#undef ELOG +#endif +#define ELOG(fmt, ...) \ + do { \ + fprintf(stderr, "[%s:%d] ERROR: " fmt, __FILE__, __LINE__, ##__VA_ARGS__); \ + } while (0)