]>
git.ipfire.org Git - people/ms/libloc.git/blob - src/loc/private.h
2 libloc - A library to determine the location of someone on the Internet
4 Copyright (C) 2017 IPFire Development Team <info@ipfire.org>
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
17 #ifndef LIBLOC_PRIVATE_H
18 #define LIBLOC_PRIVATE_H
22 #include <netinet/in.h>
26 #include <loc/libloc.h>
28 static inline void __attribute__((always_inline
, format(printf
, 2, 3)))
29 loc_log_null(struct loc_ctx
*ctx
, const char *format
, ...) {}
31 #define loc_log_cond(ctx, prio, arg...) \
33 if (loc_get_log_priority(ctx) >= prio) \
34 loc_log(ctx, prio, __FILE__, __LINE__, __FUNCTION__, ## arg); \
38 # define DEBUG(ctx, arg...) loc_log_cond(ctx, LOG_DEBUG, ## arg)
40 # define DEBUG(ctx, arg...) loc_log_null(ctx, ## arg)
43 #define INFO(ctx, arg...) loc_log_cond(ctx, LOG_INFO, ## arg)
44 #define ERROR(ctx, arg...) loc_log_cond(ctx, LOG_ERR, ## arg)
46 #ifndef HAVE_SECURE_GETENV
47 # ifdef HAVE___SECURE_GETENV
48 # define secure_getenv __secure_getenv
50 # define secure_getenv getenv
54 #define LOC_EXPORT __attribute__ ((visibility("default")))
56 void loc_log(struct loc_ctx
*ctx
,
57 int priority
, const char *file
, int line
, const char *fn
,
58 const char *format
, ...) __attribute__((format(printf
, 6, 7)));
60 static inline int in6_addr_cmp(const struct in6_addr
* a1
, const struct in6_addr
* a2
) {
61 for (unsigned int i
= 0; i
< 16; i
++) {
62 if (a1
->s6_addr
[i
] > a2
->s6_addr
[i
])
65 else if (a1
->s6_addr
[i
] < a2
->s6_addr
[i
])
72 static inline int in6_addr_get_bit(const struct in6_addr
* address
, unsigned int i
) {
73 return ((address
->s6_addr
[i
/ 8] >> (7 - (i
% 8))) & 1);
76 static inline void in6_addr_set_bit(struct in6_addr
* address
, unsigned int i
, unsigned int val
) {
77 address
->s6_addr
[i
/ 8] ^= (-val
^ address
->s6_addr
[i
/ 8]) & (1 << (7 - (i
% 8)));