1 /* 2 * Copyright (C) 2017 THL A29 Limited, a Tencent company. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this 9 * list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 18 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * 25 */ 26 27 #ifndef _FF_COMPAT_H 28 #define _FF_COMPAT_H 29 30 #include <stddef.h> 31 32 #ifndef __dead2 33 #define __dead2 __attribute__((__noreturn__)) 34 #endif 35 36 #ifndef __dead 37 #define __dead __dead2 38 #endif 39 40 #ifndef nitems 41 #define nitems(x) (sizeof((x)) / sizeof((x)[0])) 42 #endif 43 44 #ifndef rounddown 45 #define rounddown(x, y) (((x)/(y))*(y)) 46 #endif 47 48 #ifndef rounddown2 49 #define rounddown2(x, y) ((x)&(~((y)-1))) /* if y is power of two */ 50 #endif 51 52 #ifndef roundup 53 #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) /* to any y */ 54 #endif 55 56 #ifndef roundup2 57 #define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */ 58 #endif 59 60 #ifndef powerof2 61 #define powerof2(x) ((((x)-1)&(x))==0) 62 #endif 63 64 #ifndef __FBSDID 65 #define __FBSDID(s) /* nothing */ 66 #endif 67 68 #ifndef _PATH_ETC 69 #define _PATH_ETC "/etc" 70 #endif 71 72 #ifndef __PAST_END 73 /* 74 * Access a variable length array that has been declared as a fixed 75 * length array. 76 */ 77 #define __PAST_END(array, offset) (((__typeof__(*(array)) *)(array))[offset]) 78 #endif 79 80 #ifndef ishexnumber 81 #define ishexnumber(x) isxdigit(x) 82 #endif 83 84 #define CLOCK_REALTIME_FAST 10 /* FreeBSD-specific. */ 85 #ifdef INET6 86 #define CLOCK_MONOTONIC_FAST 12 /* FreeBSD-specific. */ 87 88 #define AF_INET6_LINUX 10 89 #define PF_INET6_LINUX AF_INET6 90 #endif 91 92 void *reallocf(void *ptr, size_t size); 93 94 int feature_present(const char *feature); 95 96 size_t strlcat(char *dst, const char *src, size_t siz); 97 98 size_t strlcpy(char * __restrict dst, const char * __restrict src, 99 size_t siz); 100 101 long long strtonum(const char *numstr, long long minval, 102 long long maxval, const char **errstrp); 103 104 const char *getprogname(void); 105 106 extern int optreset; 107 108 #endif 109