+#ifndef __constructor
+#define __constructor __attribute__((constructor))
+#endif
+
+#ifndef __destructor
+#define __destructor __attribute__((destructor))
+#endif
+
+#ifndef __hidden
+#define __hidden __attribute__((visibility("hidden")))
+#endif
+
+#ifndef BITS_PER_LONG
+#define BITS_PER_LONG (8 * sizeof(unsigned long))
+#endif
+
+#define BITFIELD_SIZE(_n) (((_n) + (BITS_PER_LONG - 1)) / BITS_PER_LONG)
+
+static inline void bitfield_set(unsigned long *bits, int bit)
+{
+ bits[bit / BITS_PER_LONG] |= (1UL << (bit % BITS_PER_LONG));
+}
+
+static inline bool bitfield_test(unsigned long *bits, int bit)
+{
+ return !!(bits[bit / BITS_PER_LONG] & (1UL << (bit % BITS_PER_LONG)));
+}
+
+int b64_encode(const void *src, size_t src_len,
+ void *dest, size_t dest_len);
+
+int b64_decode(const void *src, void *dest, size_t dest_len);
+
+#define B64_ENCODE_LEN(_len) ((((_len) + 2) / 3) * 4 + 1)
+#define B64_DECODE_LEN(_len) (((_len) / 4) * 3 + 1)
+
+static inline unsigned int cbuf_order(unsigned int x)
+{
+ return 32 - __builtin_clz(x - 1);
+}
+
+static inline unsigned long cbuf_size(int order)
+{
+ unsigned long page_size = sysconf(_SC_PAGESIZE);
+ unsigned long ret = 1ULL << order;
+
+ if (ret < page_size)
+ ret = page_size;
+
+ return ret;
+}
+
+void *cbuf_alloc(unsigned int order);
+void cbuf_free(void *ptr, unsigned int order);
+