]> git.sur5r.net Git - i3/i3/blobdiff - i3bar/include/util.h
Merge branch 'master' into next
[i3/i3] / i3bar / include / util.h
index 2e55e114f7dcd8604961468d60941f32d3254bea..9ffd4467f56ceb3f5078e0432b0c569dd3565b60 100644 (file)
@@ -1,22 +1,65 @@
-#ifndef UTIL_H_
-#define UTIL_H_
+/*
+ * vim:ts=4:sw=4:expandtab
+ *
+ * i3 - an improved dynamic tiling window manager
+ * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE)
+ *
+ */
+#pragma once
+
+#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); \
-               p = NULL; \
-       } \
+    if (p != NULL) { \
+        free(p); \
+        p = NULL; \
+    } \
 } while (0)
 
 /* Securely fee single-linked list */
-#define FREE_LIST(l, type) do { \
-       type* FREE_LIST_TMP; \
-       while (l != NULL) { \
-               FREE_LIST_TMP = l; \
-               free(l); \
-               l = l->next; \
-       } \
+#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 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)
+
+#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)
+
+/* 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)