Annotation of libelwix/inc/defs.h, revision 1.1

1.1     ! misho       1: /*************************************************************************
        !             2: * (C) 2013 AITNET ltd - Sofia/Bulgaria - <misho@aitnet.org>
        !             3: *  by Michael Pounov <misho@elwix.org>
        !             4: *
        !             5: * $Author: misho $
        !             6: * $Id: defs.h,v 1.8 2012/08/02 00:47:46 misho Exp $
        !             7: *
        !             8: **************************************************************************
        !             9: The ELWIX and AITNET software is distributed under the following
        !            10: terms:
        !            11: 
        !            12: All of the documentation and software included in the ELWIX and AITNET
        !            13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
        !            14: 
        !            15: Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
        !            16:        by Michael Pounov <misho@elwix.org>.  All rights reserved.
        !            17: 
        !            18: Redistribution and use in source and binary forms, with or without
        !            19: modification, are permitted provided that the following conditions
        !            20: are met:
        !            21: 1. Redistributions of source code must retain the above copyright
        !            22:    notice, this list of conditions and the following disclaimer.
        !            23: 2. Redistributions in binary form must reproduce the above copyright
        !            24:    notice, this list of conditions and the following disclaimer in the
        !            25:    documentation and/or other materials provided with the distribution.
        !            26: 3. All advertising materials mentioning features or use of this software
        !            27:    must display the following acknowledgement:
        !            28: This product includes software developed by Michael Pounov <misho@elwix.org>
        !            29: ELWIX - Embedded LightWeight unIX and its contributors.
        !            30: 4. Neither the name of AITNET nor the names of its contributors
        !            31:    may be used to endorse or promote products derived from this software
        !            32:    without specific prior written permission.
        !            33: 
        !            34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
        !            35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            37: ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            44: SUCH DAMAGE.
        !            45: */
        !            46: #ifndef __DEFS_H
        !            47: #define __DEFS_H
        !            48: 
        !            49: 
        !            50: /* memory pool helper macros */
        !            51: 
        !            52: #define MEM_MAGIC_START        0xAAAAAAAA
        !            53: #define MEM_MAGIC_STOP 0x55555555
        !            54: #define MEM_ALLOC_MAX  0xFFFFFFF3
        !            55: 
        !            56: #define MEM_MIN_BUCKET 4
        !            57: #define MEM_MAX_BUCKET 32
        !            58: 
        !            59: #define MEM_PTR2LINT(x)        ((u_int) ((uintptr_t)(x)) & 0xFFFFFFFF)
        !            60: #define MEM_PTR2HINT(x)        ((u_int) (sizeof(uintptr_t) == sizeof(u_int)) ? 0 : \
        !            61:                                (((uintptr_t)(x)) >> 32) & 0xFFFFFFFF)
        !            62: #define MEM_INT2PTR(x) ((void*) ((uintptr_t)(x)))
        !            63: 
        !            64: #define MEM_BADADDR(x) (MEM_PTR2LINT(x) < 0x00001000U || MEM_PTR2LINT(x) > 0xFFFFF000U)
        !            65: #define MEM_CORRUPT(x) (!(x) || ((u_int*)(x))[-1] != MEM_MAGIC_START || \
        !            66:                                ((u_int*)(x))[((u_int*)(x))[-2]] != MEM_MAGIC_STOP)
        !            67: 
        !            68: #define mem_data(x, _type)     (assert((x)), (_type) ((x)->alloc_mem ? ((x)->alloc_mem + 2) : NULL))
        !            69: #define mem_len(x)             (assert((x)), (x)->alloc_mem ? *(x)->alloc_mem : 0)
        !            70: #define mem_size(x)            (mem_len((x)) * sizeof(u_int))
        !            71: 
        !            72: 
        !            73: /* CRC helpers */
        !            74: 
        !            75: #define MAX_FLETCHER16_DIGEST  21
        !            76: #define MAX_FLETCHER_DIGEST    360
        !            77: #define MAX_ADLER_DIGEST       5552
        !            78: 
        !            79: #define POLY_CRC32             0xC0A0A0D5
        !            80: #define INIT_BERNSTEIN         0x1505
        !            81: #define INIT_FNV1              0x811c9dc5
        !            82: #define POLY_FNV1              0x1000193
        !            83: #define INIT_JENKINS32         0xDEADBEEF
        !            84: 
        !            85: #define ROT32(x, k)            (((x) << (k)) | ((x) >> (32 - (k))))
        !            86: #define MIX32(a, b, c) \
        !            87: do { \
        !            88:          a -= c;  a ^= ROT32(c, 4);  c += b; \
        !            89:          b -= a;  b ^= ROT32(a, 6);  a += c; \
        !            90:          c -= b;  c ^= ROT32(b, 8);  b += a; \
        !            91:          a -= c;  a ^= ROT32(c, 16); c += b; \
        !            92:          b -= a;  b ^= ROT32(a, 19); a += c; \
        !            93:          c -= b;  c ^= ROT32(b, 4);  b += a; \
        !            94: } while (0)
        !            95: #define FINAL32(a, b, c) \
        !            96: do { \
        !            97:          c ^= b; c -= ROT32(b, 14); \
        !            98:          a ^= c; a -= ROT32(c, 11); \
        !            99:          b ^= a; b -= ROT32(a, 25); \
        !           100:          c ^= b; c -= ROT32(b, 16); \
        !           101:          a ^= c; a -= ROT32(c, 4);  \
        !           102:          b ^= a; b -= ROT32(a, 14); \
        !           103:          c ^= b; c -= ROT32(b, 24); \
        !           104: } while (0)
        !           105: 
        !           106: 
        !           107: #define LOGERR { \
        !           108:                        elwix_Errno = errno; \
        !           109:                        strlcpy(elwix_Error, strerror(errno), sizeof elwix_Error); \
        !           110:                }
        !           111: 
        !           112: extern mpool_t *elwix_mpool;
        !           113: extern int use_mm;
        !           114: extern const char elwix_Prog[STRSIZ];
        !           115: 
        !           116: extern int elwix_Errno;
        !           117: extern char elwix_Error[STRSIZ];
        !           118: 
        !           119: inline void elwix_SetErr(int eno, char *estr, ...);
        !           120: 
        !           121: 
        !           122: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>