1df6ad731Slogwang /* 22317ada5Sfengbojiang * Copyright (C) 2017-2021 THL A29 Limited, a Tencent company. 3df6ad731Slogwang * All rights reserved. 4df6ad731Slogwang * 5df6ad731Slogwang * Redistribution and use in source and binary forms, with or without 6df6ad731Slogwang * modification, are permitted provided that the following conditions are met: 7df6ad731Slogwang * 8df6ad731Slogwang * 1. Redistributions of source code must retain the above copyright notice, this 9df6ad731Slogwang * list of conditions and the following disclaimer. 10df6ad731Slogwang * 2. Redistributions in binary form must reproduce the above copyright notice, 11df6ad731Slogwang * this list of conditions and the following disclaimer in the documentation 12df6ad731Slogwang * and/or other materials provided with the distribution. 13df6ad731Slogwang * 14df6ad731Slogwang * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 15df6ad731Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16df6ad731Slogwang * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17df6ad731Slogwang * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 18df6ad731Slogwang * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19df6ad731Slogwang * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20df6ad731Slogwang * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21df6ad731Slogwang * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22df6ad731Slogwang * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23df6ad731Slogwang * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24df6ad731Slogwang * 25df6ad731Slogwang */ 26df6ad731Slogwang 27df6ad731Slogwang #ifndef _FF_COMPAT_H 28df6ad731Slogwang #define _FF_COMPAT_H 29df6ad731Slogwang 30df6ad731Slogwang #include <stddef.h> 31df6ad731Slogwang 32144c6bcdSlogwang #ifndef __dead2 33144c6bcdSlogwang #define __dead2 __attribute__((__noreturn__)) 34144c6bcdSlogwang #endif 35144c6bcdSlogwang 36144c6bcdSlogwang #ifndef __dead 37144c6bcdSlogwang #define __dead __dead2 38144c6bcdSlogwang #endif 39144c6bcdSlogwang 40144c6bcdSlogwang #ifndef nitems 41144c6bcdSlogwang #define nitems(x) (sizeof((x)) / sizeof((x)[0])) 42144c6bcdSlogwang #endif 43144c6bcdSlogwang 44127dd473Swhl739 #ifndef rounddown 45127dd473Swhl739 #define rounddown(x, y) (((x)/(y))*(y)) 46127dd473Swhl739 #endif 47127dd473Swhl739 48127dd473Swhl739 #ifndef rounddown2 49127dd473Swhl739 #define rounddown2(x, y) ((x)&(~((y)-1))) /* if y is power of two */ 50127dd473Swhl739 #endif 51127dd473Swhl739 52127dd473Swhl739 #ifndef roundup 53127dd473Swhl739 #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) /* to any y */ 54127dd473Swhl739 #endif 55127dd473Swhl739 56127dd473Swhl739 #ifndef roundup2 57127dd473Swhl739 #define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */ 58127dd473Swhl739 #endif 59127dd473Swhl739 60127dd473Swhl739 #ifndef powerof2 61127dd473Swhl739 #define powerof2(x) ((((x)-1)&(x))==0) 62127dd473Swhl739 #endif 63127dd473Swhl739 64144c6bcdSlogwang #ifndef __FBSDID 65144c6bcdSlogwang #define __FBSDID(s) /* nothing */ 66144c6bcdSlogwang #endif 67144c6bcdSlogwang 681eaf0ac3Slogwang #ifndef _PATH_ETC 691eaf0ac3Slogwang #define _PATH_ETC "/etc" 701eaf0ac3Slogwang #endif 711eaf0ac3Slogwang 72127dd473Swhl739 #ifndef __PAST_END 73127dd473Swhl739 /* 74127dd473Swhl739 * Access a variable length array that has been declared as a fixed 75127dd473Swhl739 * length array. 76127dd473Swhl739 */ 77127dd473Swhl739 #define __PAST_END(array, offset) (((__typeof__(*(array)) *)(array))[offset]) 78127dd473Swhl739 #endif 79127dd473Swhl739 80127dd473Swhl739 #ifndef ishexnumber 81127dd473Swhl739 #define ishexnumber(x) isxdigit(x) 82127dd473Swhl739 #endif 83127dd473Swhl739 84143d7be7Sfengbojiang(姜凤波) #define CLOCK_REALTIME_FAST 10 /* FreeBSD-specific. */ 85143d7be7Sfengbojiang(姜凤波) #ifdef INET6 86143d7be7Sfengbojiang(姜凤波) #define CLOCK_MONOTONIC_FAST 12 /* FreeBSD-specific. */ 87143d7be7Sfengbojiang(姜凤波) 88143d7be7Sfengbojiang(姜凤波) #define AF_INET6_LINUX 10 89143d7be7Sfengbojiang(姜凤波) #define PF_INET6_LINUX AF_INET6 90143d7be7Sfengbojiang(姜凤波) #endif 91143d7be7Sfengbojiang(姜凤波) 92df6ad731Slogwang void *reallocf(void *ptr, size_t size); 93df6ad731Slogwang 94df6ad731Slogwang int feature_present(const char *feature); 95df6ad731Slogwang 96df6ad731Slogwang size_t strlcat(char *dst, const char *src, size_t siz); 97df6ad731Slogwang 98df6ad731Slogwang size_t strlcpy(char * __restrict dst, const char * __restrict src, 99df6ad731Slogwang size_t siz); 100df6ad731Slogwang 101df6ad731Slogwang long long strtonum(const char *numstr, long long minval, 102df6ad731Slogwang long long maxval, const char **errstrp); 103df6ad731Slogwang 1041eaf0ac3Slogwang const char *getprogname(void); 1051eaf0ac3Slogwang 106127dd473Swhl739 extern int optreset; 107127dd473Swhl739 108*d4a07e70Sfengbojiang int fnmatch(const char *, const char *, int); 109*d4a07e70Sfengbojiang 110df6ad731Slogwang #endif 111