1 /* lzo_ptr.c -- low-level pointer constructs 2 3 This file is part of the LZO real-time data compression library. 4 5 Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer 6 All Rights Reserved. 7 8 The LZO library is free software; you can redistribute it and/or 9 modify it under the terms of the GNU General Public License as 10 published by the Free Software Foundation; either version 2 of 11 the License, or (at your option) any later version. 12 13 The LZO library is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with the LZO library; see the file COPYING. 20 If not, write to the Free Software Foundation, Inc., 21 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 22 23 Markus F.X.J. Oberhumer 24 <markus (at) oberhumer.com> 25 http://www.oberhumer.com/opensource/lzo/ 26 */ 27 28 29 #include "lzo_conf.h" 30 31 32 /*********************************************************************** 33 // 34 ************************************************************************/ 35 36 LZO_PUBLIC(lzo_uintptr_t) 37 __lzo_ptr_linear(const lzo_voidp ptr) 38 { 39 lzo_uintptr_t p; 40 41 #if (LZO_ARCH_I086) 42 #error "LZO_ARCH_I086 is unsupported" 43 #elif (LZO_MM_PVP) 44 #error "LZO_MM_PVP is unsupported" 45 #else 46 p = (lzo_uintptr_t) PTR_LINEAR(ptr); 47 #endif 48 49 return p; 50 } 51 52 53 /*********************************************************************** 54 // 55 ************************************************************************/ 56 57 LZO_PUBLIC(unsigned) 58 __lzo_align_gap(const lzo_voidp ptr, lzo_uint size) 59 { 60 #if (__LZO_UINTPTR_T_IS_POINTER) 61 #error "__LZO_UINTPTR_T_IS_POINTER is unsupported" 62 #else 63 lzo_uintptr_t p, n; 64 p = __lzo_ptr_linear(ptr); 65 n = (((p + size - 1) / size) * size) - p; 66 #endif 67 68 assert(size > 0); 69 assert((long)n >= 0); 70 assert(n <= size); 71 return (unsigned)n; 72 } 73 74 75 76 /* 77 vi:ts=4:et 78 */ 79