2010-08-07 12:05:16 -04:00
|
|
|
/*
|
2011-10-25 16:19:38 -04:00
|
|
|
* vim:ts=4:sw=4:expandtab
|
2010-08-07 12:05:16 -04:00
|
|
|
*
|
2011-10-25 16:19:38 -04:00
|
|
|
* i3 - an improved dynamic tiling window manager
|
|
|
|
* © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE)
|
2010-08-07 12:05:16 -04:00
|
|
|
*
|
|
|
|
*/
|
2010-07-21 19:15:18 -04:00
|
|
|
#ifndef UTIL_H_
|
|
|
|
#define UTIL_H_
|
|
|
|
|
2010-07-29 21:11:54 -04:00
|
|
|
#include "queue.h"
|
|
|
|
|
2010-09-16 19:16:53 -04:00
|
|
|
/* Get the maximum/minimum of x and y */
|
2012-08-05 15:36:49 -04:00
|
|
|
#undef MAX
|
2010-09-16 19:16:53 -04:00
|
|
|
#define MAX(x,y) ((x) > (y) ? (x) : (y))
|
2012-08-05 15:36:49 -04:00
|
|
|
#undef MIN
|
2010-09-16 19:16:53 -04:00
|
|
|
#define MIN(x,y) ((x) < (y) ? (x) : (y))
|
|
|
|
|
2010-07-21 19:15:18 -04:00
|
|
|
/* Securely free p */
|
|
|
|
#define FREE(p) do { \
|
2010-08-03 15:20:11 -04:00
|
|
|
if (p != NULL) { \
|
|
|
|
free(p); \
|
|
|
|
p = NULL; \
|
|
|
|
} \
|
2010-07-21 19:15:18 -04:00
|
|
|
} while (0)
|
|
|
|
|
|
|
|
/* Securely fee single-linked list */
|
2010-07-29 21:11:54 -04:00
|
|
|
#define FREE_SLIST(l, type) do { \
|
2010-08-03 15:20:11 -04:00
|
|
|
type *walk = SLIST_FIRST(l); \
|
|
|
|
while (!SLIST_EMPTY(l)) { \
|
|
|
|
SLIST_REMOVE_HEAD(l, slist); \
|
|
|
|
FREE(walk); \
|
|
|
|
walk = SLIST_FIRST(l); \
|
|
|
|
} \
|
2010-07-21 19:15:18 -04:00
|
|
|
} while (0)
|
|
|
|
|
|
|
|
#endif
|
2010-07-29 21:11:54 -04:00
|
|
|
|
|
|
|
/* Securely fee tail-queues */
|
|
|
|
#define FREE_TAILQ(l, type) do { \
|
2010-08-03 15:20:11 -04:00
|
|
|
type *walk = TAILQ_FIRST(l); \
|
|
|
|
while (!TAILQ_EMPTY(l)) { \
|
|
|
|
TAILQ_REMOVE(l, TAILQ_FIRST(l), tailq); \
|
|
|
|
FREE(walk); \
|
|
|
|
walk = TAILQ_FIRST(l); \
|
|
|
|
} \
|
2010-07-29 21:11:54 -04:00
|
|
|
} while (0)
|
2010-09-17 00:49:28 -04:00
|
|
|
|
|
|
|
/* Use cool logging-macros */
|
|
|
|
#define DLOG(fmt, ...) do { \
|
|
|
|
if (config.verbose) { \
|
|
|
|
printf("[%s:%d] " fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
|
|
} \
|
|
|
|
} while(0)
|
|
|
|
|
2012-08-10 09:39:50 -04:00
|
|
|
/* 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
|
2010-09-17 00:49:28 -04:00
|
|
|
#define ELOG(fmt, ...) do { \
|
|
|
|
fprintf(stderr, "[%s:%d] ERROR: " fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
|
|
} while(0)
|