diff options
Diffstat (limited to 'utils/open-isns/util.h')
-rw-r--r-- | utils/open-isns/util.h | 289 |
1 files changed, 0 insertions, 289 deletions
diff --git a/utils/open-isns/util.h b/utils/open-isns/util.h deleted file mode 100644 index deecb24..0000000 --- a/utils/open-isns/util.h +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Utility functions - * - * Copyright (C) 2006, 2007 Olaf Kirch <olaf.kirch@oracle.com> - */ - -#ifndef UTIL_H -#define UTIL_H - -#include <sys/types.h> -#include <stdint.h> -#include <stdlib.h> -#include <stdio.h> -#include <stddef.h> -#include <string.h> // for strdup -#include "types.h" - -#define array_num_elements(a) (sizeof(a) / sizeof((a)[0])) - -const char * isns_dirname(const char *); -int isns_mkdir_recursive(const char *); - -extern const char *parser_separators; -char * parser_get_next_line(FILE *); -char * parser_get_next_word(char **); -char * parser_get_rest_of_line(char **); -int parser_split_line(char *, unsigned int, char **); - -unsigned long parse_size(const char *); -unsigned int parse_count(const char *); -int parse_int(const char *); -long long parse_longlong(const char *); -double parse_double(const char *); -unsigned int parse_timeout(const char *); - -char * print_size(unsigned long); - -/* - * Very simple and stupid string array. - */ -struct string_array { - unsigned int count; - char ** list; -}; - -void isns_string_array_append(struct string_array *, const char *); -void isns_string_array_destroy(struct string_array *); - -void isns_assign_string(char **, const char *); - -void isns_write_pidfile(const char *); -void isns_update_pidfile(const char *); -void isns_remove_pidfile(const char *); - -extern void isns_log_background(void); -extern void isns_assert_failed(const char *, - const char *, unsigned int); -extern void isns_fatal(const char *, ...); -extern void isns_warning(const char *, ...); -extern void isns_error(const char *, ...); -extern void isns_notice(const char *, ...); -extern void isns_debug_general(const char *, ...); -extern void isns_debug_socket(const char *, ...); -extern void isns_debug_protocol(const char *, ...); -extern void isns_debug_message(const char *, ...); -extern void isns_debug_state(const char *, ...); -extern void isns_debug_auth(const char *, ...); -extern void isns_debug_scn(const char *, ...); -extern void isns_debug_esi(const char *, ...); -extern void isns_enable_debugging(const char *); -extern int isns_debug_enabled(int); - -enum { - DBG_GENERAL = 0, - DBG_SOCKET, - DBG_PROTOCOL, - DBG_MESSAGE, - DBG_STATE, - DBG_AUTH, - DBG_SCN, - DBG_ESI, -}; - -/* - * There's no htonll yet - */ -#ifndef htonll -# include <endian.h> -# include <byteswap.h> -# if __BYTE_ORDER == __BIG_ENDIAN -# define htonll(x) (x) -# define ntohll(x) (x) -# elif __BYTE_ORDER == __LITTLE_ENDIAN -# define htonll(x) __bswap_64(x) -# define ntohll(x) __bswap_64(x) -# endif -#endif - -/* - * One of the those eternal staples of C coding: - */ -#ifndef MIN -# define MIN(a, b) ((a) < (b)? (a) : (b)) -# define MAX(a, b) ((a) > (b)? (a) : (b)) -#endif - -#define DECLARE_BITMAP(name, NBITS) \ - uint32_t name[(NBITS+31) >> 5] = { 0 } - -#define __BIT_INDEX(nr) (nr >> 5) -#define __BIT_MASK(nr) (1 << (nr & 31)) - -static inline void -set_bit(uint32_t *map, unsigned int nr) -{ - map[__BIT_INDEX(nr)] |= __BIT_MASK(nr); -} - -static inline void -clear_bit(uint32_t *map, unsigned int nr) -{ - map[__BIT_INDEX(nr)] &= ~__BIT_MASK(nr); -} - -static inline int -test_bit(const uint32_t *map, unsigned int nr) -{ - return !!(map[__BIT_INDEX(nr)] & __BIT_MASK(nr)); -} - -/* - * Dynamically sized bit vector - */ -extern isns_bitvector_t *isns_bitvector_alloc(void); -extern void isns_bitvector_init(isns_bitvector_t *); -extern void isns_bitvector_destroy(isns_bitvector_t *); -extern void isns_bitvector_free(isns_bitvector_t *); -extern int isns_bitvector_test_bit(const isns_bitvector_t *, unsigned int); -extern int isns_bitvector_set_bit(isns_bitvector_t *, unsigned int); -extern int isns_bitvector_clear_bit(isns_bitvector_t *, unsigned int); -extern int isns_bitvector_is_empty(const isns_bitvector_t *); -extern int isns_bitvector_intersect(const isns_bitvector_t *a, - const isns_bitvector_t *b, - isns_bitvector_t *result); -extern void isns_bitvector_print(const isns_bitvector_t *, - isns_print_fn_t *); -extern void isns_bitvector_foreach(const isns_bitvector_t *bv, - int (*cb)(uint32_t, void *), - void *user_data); - -/* - * List manipulation primites - */ -typedef struct isns_list isns_list_t; -struct isns_list { - isns_list_t * next; - isns_list_t * prev; -}; - -#define ISNS_LIST_DECLARE(list) \ - isns_list_t list = { &list, &list } - -static inline void -isns_list_init(isns_list_t *head) -{ - head->next = head->prev = head; -} - -static inline void -__isns_list_insert(isns_list_t *prev, isns_list_t *item, isns_list_t *next) -{ - item->next = next; - item->prev = prev; - next->prev = item; - prev->next = item; -} - -static inline void -isns_list_append(isns_list_t *head, isns_list_t *item) -{ - __isns_list_insert(head->prev, item, head); -} - -static inline void -isns_list_insert(isns_list_t *head, isns_list_t *item) -{ - __isns_list_insert(head, item, head->next); -} - -static inline void -isns_item_insert_before(isns_list_t *where, isns_list_t *item) -{ - __isns_list_insert(where->prev, item, where); -} - -static inline void -isns_item_insert_after(isns_list_t *where, isns_list_t *item) -{ - __isns_list_insert(where, item, where->next); -} - -static inline void -isns_list_del(isns_list_t *item) -{ - isns_list_t *prev = item->prev; - isns_list_t *next = item->next; - - prev->next = next; - next->prev = prev; - item->next = item->prev = item; -} - -static inline int -isns_list_empty(const isns_list_t *head) -{ - return head == head->next; -} - -static inline void -isns_list_move(isns_list_t *dst, isns_list_t *src) -{ - isns_list_t *prev, *next; - isns_list_t *head, *tail; - - if (isns_list_empty(src)) - return; - - prev = dst->prev; - next = dst; - - head = src->next; - tail = src->prev; - - next->prev = tail; - prev->next = head; - head->prev = prev; - tail->next = next; - - src->next = src->prev = src; -} - -#define isns_list_item(type, member, ptr) \ - container_of(type, member, ptr) - -#define isns_list_foreach(list, __pos, __next) \ - for (__pos = (list)->next; \ - (__pos != list) && (__next = __pos->next, 1); \ - __pos = __next) - -#if 0 -/* This is defined in stddef */ -#define offsetof(type, member) ((unsigned long) &(((type *) 0)->member)) -#endif -#define container_of(type, member, ptr) \ - ((type *) (((unsigned char *) ptr) - offsetof(type, member))) - -/* - * Use isns_assert instead of libc's assert, so that the - * message can be captured and sent to syslog. - */ -#define isns_assert(condition) do { \ - if (!(condition)) \ - isns_assert_failed(#condition, \ - __FILE__, __LINE__); \ -} while (0) - -#ifndef MDEBUG -# define isns_malloc(size) malloc(size) -# define isns_calloc(n, size) calloc(n, size) -# define isns_realloc(p, size) realloc(p, size) -# define isns_strdup(s) strdup(s) -# define isns_free(p) free(p) -#else -# define isns_malloc(size) isns_malloc_fn(size, __FILE__, __LINE__) -# define isns_calloc(n, size) isns_calloc_fn(n, size, __FILE__, __LINE__) -# define isns_realloc(p, size) isns_realloc_fn(p, size, __FILE__, __LINE__) -# define isns_strdup(s) isns_strdup_fn(s, __FILE__, __LINE__) -# define isns_free(p) isns_free_fn(p, __FILE__, __LINE__) - -extern void * (*isns_malloc_fn)(size_t, const char *, unsigned int); -extern void * (*isns_calloc_fn)(unsigned int, size_t, - const char *, unsigned int); -extern void * (*isns_realloc_fn)(void *, size_t, - const char *, unsigned int); -extern char * (*isns_strdup_fn)(const char *, const char *, unsigned int); -extern void (*isns_free_fn)(void *, const char *, unsigned int); -#endif - -#endif /* UTIL_H */ |