diff options
Diffstat (limited to 'src/common/util.h')
-rw-r--r-- | src/common/util.h | 87 |
1 files changed, 32 insertions, 55 deletions
diff --git a/src/common/util.h b/src/common/util.h index 22f4ea3b99..cdcd64f6b4 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -28,7 +28,7 @@ * calling assert() normally. */ #ifdef NDEBUG -/* Nobody should ever want to build with NDEBUG set. 99% of our asserts will +/* Nobody should ever want to build with NDEBUG set. 99% of your asserts will * be outside the critical path anyway, so it's silly to disable bugchecking * throughout the entire program just because a few asserts are slowing you * down. Profile, optimize the critical path, and keep debugging on. @@ -38,17 +38,12 @@ */ #error "Sorry; we don't support building with NDEBUG." #else -#ifdef __GNUC__ -#define PREDICT_FALSE(x) PREDICT((x) == ((typeof(x)) 0), 0) -#else -#define PREDICT_FALSE(x) !(x) -#endif #define tor_assert(expr) do { \ - if (PREDICT_FALSE(expr)) { \ + if (!(expr)) { \ log(LOG_ERR, LD_BUG, "%s:%d: %s: Assertion %s failed; aborting.", \ - _SHORT_FILE_, __LINE__, __func__, #expr); \ + _SHORT_FILE_, __LINE__, __func__, #expr); \ fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \ - _SHORT_FILE_, __LINE__, __func__, #expr); \ + _SHORT_FILE_, __LINE__, __func__, #expr); \ abort(); \ } } while (0) #endif @@ -67,27 +62,22 @@ #define tor_fragile_assert() /* Memory management */ -void *_tor_malloc(size_t size DMALLOC_PARAMS) ATTR_MALLOC; -void *_tor_malloc_zero(size_t size DMALLOC_PARAMS) ATTR_MALLOC; +void *_tor_malloc(size_t size DMALLOC_PARAMS); +void *_tor_malloc_zero(size_t size DMALLOC_PARAMS); void *_tor_realloc(void *ptr, size_t size DMALLOC_PARAMS); -char *_tor_strdup(const char *s DMALLOC_PARAMS) ATTR_MALLOC ATTR_NONNULL((1)); -char *_tor_strndup(const char *s, size_t n DMALLOC_PARAMS) - ATTR_MALLOC ATTR_NONNULL((1)); -void *_tor_memdup(const void *mem, size_t len DMALLOC_PARAMS) - ATTR_MALLOC ATTR_NONNULL((1)); -void _tor_free(void *mem); +char *_tor_strdup(const char *s DMALLOC_PARAMS); +char *_tor_strndup(const char *s, size_t n DMALLOC_PARAMS); #ifdef USE_DMALLOC extern int dmalloc_free(const char *file, const int line, void *pnt, const int func_id); #define tor_free(p) do { \ - if (PREDICT((p)!=NULL, 1) { \ + if (p) { \ dmalloc_free(_SHORT_FILE_, __LINE__, (p), 0); \ (p)=NULL; \ } \ } while (0) #else -#define tor_free(p) do { if (PREDICT((p)!=NULL,1)) { free(p); (p)=NULL;} } \ - while (0) +#define tor_free(p) do { if (p) {free(p); (p)=NULL;} } while (0) #endif #define tor_malloc(size) _tor_malloc(size DMALLOC_ARGS) @@ -95,29 +85,17 @@ extern int dmalloc_free(const char *file, const int line, void *pnt, #define tor_realloc(ptr, size) _tor_realloc(ptr, size DMALLOC_ARGS) #define tor_strdup(s) _tor_strdup(s DMALLOC_ARGS) #define tor_strndup(s, n) _tor_strndup(s, n DMALLOC_ARGS) -#define tor_memdup(s, n) _tor_memdup(s, n DMALLOC_ARGS) - -/** Return the offset of <b>member</b> within the type <b>tp</b>, in bytes */ -#if defined(__GNUC__) && __GNUC__ > 3 -#define STRUCT_OFFSET(tp, member) __builtin_offsetof(tp, member) -#else - #define STRUCT_OFFSET(tp, member) \ - ((off_t) (((char*)&((tp*)0)->member)-(char*)0)) -#endif /* String manipulation */ #define HEX_CHARACTERS "0123456789ABCDEFabcdef" -void tor_strlower(char *s) ATTR_NONNULL((1)); -void tor_strupper(char *s) ATTR_NONNULL((1)); -int tor_strisprint(const char *s) ATTR_PURE ATTR_NONNULL((1)); -int tor_strisnonupper(const char *s) ATTR_PURE ATTR_NONNULL((1)); -int strcmpstart(const char *s1, const char *s2) ATTR_PURE ATTR_NONNULL((1,2)); -int strcasecmpstart(const char *s1, const char *s2) - ATTR_PURE ATTR_NONNULL((1,2)); -int strcmpend(const char *s1, const char *s2) ATTR_PURE ATTR_NONNULL((1,2)); -int strcasecmpend(const char *s1, const char *s2) - ATTR_PURE ATTR_NONNULL((1,2)); -int tor_strstrip(char *s, const char *strip) ATTR_NONNULL((1,2)); +void tor_strlower(char *s); +void tor_strupper(char *s); +int tor_strisprint(const char *s); +int strcmpstart(const char *s1, const char *s2); +int strcasecmpstart(const char *s1, const char *s2); +int strcmpend(const char *s1, const char *s2); +int strcasecmpend(const char *s1, const char *s2); +int tor_strstrip(char *s, const char *strip); typedef enum { ALWAYS_TERMINATE, NEVER_TERMINATE, TERMINATE_IF_EVEN } part_finish_rule_t; @@ -130,13 +108,12 @@ unsigned long tor_parse_ulong(const char *s, int base, unsigned long min, unsigned long max, int *ok, char **next); uint64_t tor_parse_uint64(const char *s, int base, uint64_t min, uint64_t max, int *ok, char **next); -const char *hex_str(const char *from, size_t fromlen) ATTR_NONNULL((1)); -const char *eat_whitespace(const char *s) ATTR_PURE; -const char *eat_whitespace_no_nl(const char *s) ATTR_PURE; -const char *find_whitespace(const char *s) ATTR_PURE; -int tor_mem_is_zero(const char *mem, size_t len) ATTR_PURE; -int tor_digest_is_zero(const char *digest) ATTR_PURE; -char *esc_for_log(const char *string) ATTR_MALLOC; +const char *hex_str(const char *from, size_t fromlen); +const char *eat_whitespace(const char *s); +const char *eat_whitespace_no_nl(const char *s); +const char *find_whitespace(const char *s); +int tor_digest_is_zero(const char *digest); +char *esc_for_log(const char *string); const char *escaped(const char *string); void base16_encode(char *dest, size_t destlen, const char *src, size_t srclen); @@ -180,17 +157,17 @@ int write_chunks_to_file(const char *fname, const struct smartlist_t *chunks, int append_bytes_to_file(const char *fname, const char *str, size_t len, int bin); -char *read_file_to_str(const char *filename, int bin) ATTR_MALLOC; +char *read_file_to_str(const char *filename, int bin); char *parse_line_from_str(char *line, char **key_out, char **value_out); char *expand_filename(const char *filename); struct smartlist_t *tor_listdir(const char *dirname); -int path_is_relative(const char *filename) ATTR_PURE; +int path_is_relative(const char *filename); /* Net helpers */ -int is_internal_IP(uint32_t ip, int for_listening) ATTR_PURE; -int is_local_IP(uint32_t ip) ATTR_PURE; -int parse_addr_port(int severity, const char *addrport, char **address, - uint32_t *addr, uint16_t *port_out); +int is_internal_IP(uint32_t ip, int for_listening); +int is_local_IP(uint32_t ip); +int parse_addr_port(const char *addrport, char **address, uint32_t *addr, + uint16_t *port); int parse_port_range(const char *port, uint16_t *port_min_out, uint16_t *port_max_out); int parse_addr_and_port_range(const char *s, uint32_t *addr_out, @@ -199,9 +176,9 @@ int parse_addr_and_port_range(const char *s, uint32_t *addr_out, int addr_mask_get_bits(uint32_t mask); #define INET_NTOA_BUF_LEN 16 int tor_inet_ntoa(struct in_addr *in, char *buf, size_t buf_len); -char *tor_dup_addr(uint32_t addr) ATTR_MALLOC; +char *tor_dup_addr(uint32_t addr); int is_plausible_address(const char *name); -int get_interface_address(int severity, uint32_t *addr); +int get_interface_address(uint32_t *addr); /* Process helpers */ void start_daemon(void); |