X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fbabeltrace-internal.h;h=981f84b186910cd7145fe04cb93c30805752e36c;hb=5b9e151d6a8c0327e67bca1706ef16525d1d319d;hp=d256bdf55b69ea163068e08f6b3fadfaaa7765f9;hpb=eb31c5e6bbfbb02093ff45616446c26730898c05;p=babeltrace.git diff --git a/include/babeltrace/babeltrace-internal.h b/include/babeltrace/babeltrace-internal.h index d256bdf5..981f84b1 100644 --- a/include/babeltrace/babeltrace-internal.h +++ b/include/babeltrace/babeltrace-internal.h @@ -2,8 +2,6 @@ #define _BABELTRACE_INTERNAL_H /* - * babeltrace/babeltrace-internal.h - * * Copyright 2012 - Mathieu Desnoyers * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -15,57 +13,109 @@ * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. */ #include #include #include +#include +#include +#include +#include +#include + +#define PERROR_BUFLEN 200 + +#ifndef likely +# ifdef __GNUC__ +# define likely(x) __builtin_expect(!!(x), 1) +# else +# define likely(x) (!!(x)) +# endif +#endif + +#ifndef unlikely +# ifdef __GNUC__ +# define unlikely(x) __builtin_expect(!!(x), 0) +# else +# define unlikely(x) (!!(x)) +# endif +#endif + +#ifndef min +#define min(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef max +#define max(a, b) (((a) > (b)) ? (a) : (b)) +#endif + +#ifndef max_t +#define max_t(type, a, b) \ + ((type) (a) > (type) (b) ? (type) (a) : (type) (b)) +#endif + +static inline +bool bt_safe_to_mul_int64(int64_t a, int64_t b) +{ + if (a == 0 || b == 0) { + return true; + } + + return a < INT64_MAX / b; +} + +static inline +bool bt_safe_to_mul_uint64(uint64_t a, uint64_t b) +{ + if (a == 0 || b == 0) { + return true; + } + + return a < UINT64_MAX / b; +} + +static inline +bool bt_safe_to_add_int64(int64_t a, int64_t b) +{ + return a <= INT64_MAX - b; +} + +static inline +bool bt_safe_to_add_uint64(uint64_t a, uint64_t b) +{ + return a <= UINT64_MAX - b; +} + +/* + * Memory allocation zeroed + */ +#define zmalloc(x) calloc(1, x) + +/* + * BT_HIDDEN: set the hidden attribute for internal functions + * On Windows, symbols are local unless explicitly exported, + * see https://gcc.gnu.org/wiki/Visibility + */ +#if defined(_WIN32) || defined(__CYGWIN__) +#define BT_HIDDEN +#else +#define BT_HIDDEN __attribute__((visibility("hidden"))) +#endif + +#ifndef __STRINGIFY +#define __STRINGIFY(x) #x +#endif + +#define TOSTRING(x) __STRINGIFY(x) -extern int babeltrace_verbose, babeltrace_debug; - -#define printf_verbose(fmt, args...) \ - do { \ - if (babeltrace_verbose) \ - fprintf(stdout, "[verbose] " fmt, ## args); \ - } while (0) - -#define printf_debug(fmt, args...) \ - do { \ - if (babeltrace_debug) \ - fprintf(stdout, "[debug] " fmt, ## args); \ - } while (0) - -#define likely(x) __builtin_expect(!!(x), 1) -#define unlikely(x) __builtin_expect(!!(x), 0) - -struct trace_descriptor; -struct trace_collection { - GPtrArray *array; /* struct trace_descriptor */ - GHashTable *clocks; /* struct ctf_clock */ - - uint64_t single_clock_offset_avg; - uint64_t offset_first; - int64_t delta_offset_first_sum; - int offset_nr; -}; - -extern int opt_all_field_names, - opt_scope_field_names, - opt_header_field_names, - opt_context_field_names, - opt_payload_field_names, - opt_all_fields, - opt_trace_field, - opt_trace_domain_field, - opt_trace_procname_field, - opt_trace_vpid_field, - opt_loglevel_field, - opt_delta_field, - opt_clock_raw, - opt_clock_seconds, - opt_clock_date, - opt_clock_gmt, - opt_clock_force_correlate; - -extern uint64_t opt_clock_offset; +#define BT_UNUSED __attribute__((unused)) #endif