Home | History | Annotate | Download | only in src
      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