summaryrefslogtreecommitdiffstats
path: root/src/apk_defines.h
diff options
context:
space:
mode:
authorTimo Teras <timo.teras@iki.fi>2008-04-17 14:09:13 +0000
committerTimo Teras <timo.teras@iki.fi>2008-04-17 14:09:13 +0000
commitd6c74352427367a334d37469962bbcf1b9ae364c (patch)
tree81ebcf6fc8abf08baea3f0015bc2f7a08768fb1f /src/apk_defines.h
parent45d2c702fc8a47bc3f5ab4698de2bf1e377301c4 (diff)
downloadapk-tools-d6c74352427367a334d37469962bbcf1b9ae364c.tar.bz2
apk-tools-d6c74352427367a334d37469962bbcf1b9ae364c.tar.xz
Initial commit of some stuff written so far. Still in state of flux. Expect
breakage and major changes.
Diffstat (limited to 'src/apk_defines.h')
-rw-r--r--src/apk_defines.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/src/apk_defines.h b/src/apk_defines.h
new file mode 100644
index 0000000..ecd08e3
--- /dev/null
+++ b/src/apk_defines.h
@@ -0,0 +1,147 @@
+/* apk_defines.c - Alpine Package Keeper (APK)
+ *
+ * Copyright (C) 2005-2008 Natanael Copa <n@tanael.org>
+ * Copyright (C) 2008 Timo Teräs <timo.teras@iki.fi>
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation. See http://www.gnu.org/ for details.
+ */
+
+#ifndef APK_DEFINES_H
+#define APK_DEFINES_H
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#define BIT(x) (1 << (x))
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef NULL
+#define NULL 0L
+#endif
+
+#ifndef container_of
+#define container_of(ptr, type, member) ({ \
+ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+ (type *)( (char *)__mptr - offsetof(type,member) );})
+#endif
+
+#if 1
+#include "md5.h"
+
+typedef md5sum_t csum_t;
+typedef struct md5_ctx csum_ctx_t;
+
+#define csum_init(ctx) md5_init(ctx)
+#define csum_process(ctx, buf, len) md5_process(ctx, buf, len)
+#define csum_finish(ctx, buf) md5_finish(ctx, buf)
+#endif
+
+#define apk_error(args...) apk_log("ERROR: ", args)
+#define apk_warning(args...) apk_log("WARNING: ", args)
+#define apk_message(args...) apk_log(NULL, args)
+
+void apk_log(const char *prefix, const char *format, ...);
+
+#define APK_ARRAY(array_type_name, elem_type_name) \
+ struct array_type_name { \
+ int num; \
+ elem_type_name item[]; \
+ }; \
+ static inline struct array_type_name * \
+ array_type_name##_resize(struct array_type_name *a, int size) \
+ { \
+ struct array_type_name *tmp; \
+ tmp = (struct array_type_name *) \
+ realloc(a, sizeof(struct array_type_name) + \
+ size * sizeof(elem_type_name)); \
+ tmp->num = size; \
+ return tmp; \
+ } \
+ static inline elem_type_name * \
+ array_type_name##_add(struct array_type_name **a) \
+ { \
+ int size = 1; \
+ if (*a != NULL) size += (*a)->num; \
+ *a = array_type_name##_resize(*a, size); \
+ return &(*a)->item[size-1]; \
+ }
+
+#define LIST_END (void *) 0xe01
+#define LIST_POISON1 (void *) 0xdeadbeef
+#define LIST_POISON2 (void *) 0xabbaabba
+
+struct hlist_head {
+ struct hlist_node *first;
+};
+
+struct hlist_node {
+ struct hlist_node *next;
+};
+
+static inline int hlist_empty(const struct hlist_head *h)
+{
+ return !h->first;
+}
+
+static inline int hlist_hashed(const struct hlist_node *n)
+{
+ return n->next != NULL;
+}
+
+static inline void __hlist_del(struct hlist_node *n, struct hlist_node **pprev)
+{
+ *pprev = n->next;
+}
+
+static inline void hlist_del(struct hlist_node *n, struct hlist_node **pprev)
+{
+ __hlist_del(n, pprev);
+ n->next = LIST_POISON1;
+}
+
+static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
+{
+ struct hlist_node *first = h->first;
+
+ n->next = first ? first : LIST_END;
+ h->first = n;
+}
+
+static inline void hlist_add_after(struct hlist_node *n, struct hlist_node **prev)
+{
+ n->next = *prev ? *prev : LIST_END;
+ *prev = n;
+}
+
+#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
+
+#define hlist_for_each(pos, head) \
+ for (pos = (head)->first; pos && pos != LIST_END; \
+ pos = pos->next)
+
+#define hlist_for_each_safe(pos, n, head) \
+ for (pos = (head)->first; pos && pos != LIST_END && \
+ ({ n = pos->next; 1; }); \
+ pos = n)
+
+#define hlist_for_each_entry(tpos, pos, head, member) \
+ for (pos = (head)->first; \
+ pos && pos != LIST_END && \
+ ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+ pos = pos->next)
+
+#define hlist_for_each_entry_safe(tpos, pos, n, head, member) \
+ for (pos = (head)->first; \
+ pos && pos != LIST_END && ({ n = pos->next; 1; }) && \
+ ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+ pos = n)
+
+#endif