Blame src/lzo_util.c

Packit Service 5195f2
/* lzo_util.c -- utilities for the LZO library
Packit Service 5195f2
Packit Service 5195f2
   This file is part of the LZO real-time data compression library.
Packit Service 5195f2
Packit Service 5195f2
   Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer
Packit Service 5195f2
   All Rights Reserved.
Packit Service 5195f2
Packit Service 5195f2
   The LZO library is free software; you can redistribute it and/or
Packit Service 5195f2
   modify it under the terms of the GNU General Public License as
Packit Service 5195f2
   published by the Free Software Foundation; either version 2 of
Packit Service 5195f2
   the License, or (at your option) any later version.
Packit Service 5195f2
Packit Service 5195f2
   The LZO library is distributed in the hope that it will be useful,
Packit Service 5195f2
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 5195f2
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 5195f2
   GNU General Public License for more details.
Packit Service 5195f2
Packit Service 5195f2
   You should have received a copy of the GNU General Public License
Packit Service 5195f2
   along with the LZO library; see the file COPYING.
Packit Service 5195f2
   If not, write to the Free Software Foundation, Inc.,
Packit Service 5195f2
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Packit Service 5195f2
Packit Service 5195f2
   Markus F.X.J. Oberhumer
Packit Service 5195f2
   <markus@oberhumer.com>
Packit Service 5195f2
   http://www.oberhumer.com/opensource/lzo/
Packit Service 5195f2
 */
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
#include "lzo_conf.h"
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/***********************************************************************
Packit Service 5195f2
//
Packit Service 5195f2
************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
/* If you use the LZO library in a product, I would appreciate that you
Packit Service 5195f2
 * keep this copyright string in the executable of your product.
Packit Service 5195f2
.*/
Packit Service 5195f2
Packit Service 5195f2
static const char __lzo_copyright[] =
Packit Service 5195f2
#if !defined(__LZO_IN_MINLZO)
Packit Service 5195f2
    /* save space as some people want a really small decompressor */
Packit Service 5195f2
    LZO_VERSION_STRING;
Packit Service 5195f2
#else
Packit Service 5195f2
    "\r\n\n"
Packit Service 5195f2
    "LZO data compression library.\n"
Packit Service 5195f2
    "$Copyright: LZO Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer\n"
Packit Service 5195f2
    "<markus@oberhumer.com>\n"
Packit Service 5195f2
    "http://www.oberhumer.com $\n\n"
Packit Service 5195f2
    "$Id: LZO version: v" LZO_VERSION_STRING ", " LZO_VERSION_DATE " $\n"
Packit Service 5195f2
    "$Info: " LZO_INFO_STRING " $\n";
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(const lzo_bytep)
Packit Service 5195f2
lzo_copyright(void)
Packit Service 5195f2
{
Packit Service 5195f2
    return (const lzo_bytep) __lzo_copyright;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(unsigned)
Packit Service 5195f2
lzo_version(void)
Packit Service 5195f2
{
Packit Service 5195f2
    return LZO_VERSION;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(const char *)
Packit Service 5195f2
lzo_version_string(void)
Packit Service 5195f2
{
Packit Service 5195f2
    return LZO_VERSION_STRING;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(const char *)
Packit Service 5195f2
lzo_version_date(void)
Packit Service 5195f2
{
Packit Service 5195f2
    return LZO_VERSION_DATE;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(const lzo_charp)
Packit Service 5195f2
_lzo_version_string(void)
Packit Service 5195f2
{
Packit Service 5195f2
    return LZO_VERSION_STRING;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(const lzo_charp)
Packit Service 5195f2
_lzo_version_date(void)
Packit Service 5195f2
{
Packit Service 5195f2
    return LZO_VERSION_DATE;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/***********************************************************************
Packit Service 5195f2
// adler32 checksum
Packit Service 5195f2
// adapted from free code by Mark Adler <madler@alumni.caltech.edu>
Packit Service 5195f2
// see http://www.zlib.org/
Packit Service 5195f2
************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
#define LZO_BASE 65521u /* largest prime smaller than 65536 */
Packit Service 5195f2
#define LZO_NMAX 5552
Packit Service 5195f2
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
Packit Service 5195f2
Packit Service 5195f2
#define LZO_DO1(buf,i)  s1 += buf[i]; s2 += s1
Packit Service 5195f2
#define LZO_DO2(buf,i)  LZO_DO1(buf,i); LZO_DO1(buf,i+1)
Packit Service 5195f2
#define LZO_DO4(buf,i)  LZO_DO2(buf,i); LZO_DO2(buf,i+2)
Packit Service 5195f2
#define LZO_DO8(buf,i)  LZO_DO4(buf,i); LZO_DO4(buf,i+4)
Packit Service 5195f2
#define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8)
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(lzo_uint32_t)
Packit Service 5195f2
lzo_adler32(lzo_uint32_t adler, const lzo_bytep buf, lzo_uint len)
Packit Service 5195f2
{
Packit Service 5195f2
    lzo_uint32_t s1 = adler & 0xffff;
Packit Service 5195f2
    lzo_uint32_t s2 = (adler >> 16) & 0xffff;
Packit Service 5195f2
    unsigned k;
Packit Service 5195f2
Packit Service 5195f2
    if (buf == NULL)
Packit Service 5195f2
        return 1;
Packit Service 5195f2
Packit Service 5195f2
    while (len > 0)
Packit Service 5195f2
    {
Packit Service 5195f2
        k = len < LZO_NMAX ? (unsigned) len : LZO_NMAX;
Packit Service 5195f2
        len -= k;
Packit Service 5195f2
        if (k >= 16) do
Packit Service 5195f2
        {
Packit Service 5195f2
            LZO_DO16(buf,0);
Packit Service 5195f2
            buf += 16;
Packit Service 5195f2
            k -= 16;
Packit Service 5195f2
        } while (k >= 16);
Packit Service 5195f2
        if (k != 0) do
Packit Service 5195f2
        {
Packit Service 5195f2
            s1 += *buf++;
Packit Service 5195f2
            s2 += s1;
Packit Service 5195f2
        } while (--k > 0);
Packit Service 5195f2
        s1 %= LZO_BASE;
Packit Service 5195f2
        s2 %= LZO_BASE;
Packit Service 5195f2
    }
Packit Service 5195f2
    return (s2 << 16) | s1;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
#undef LZO_DO1
Packit Service 5195f2
#undef LZO_DO2
Packit Service 5195f2
#undef LZO_DO4
Packit Service 5195f2
#undef LZO_DO8
Packit Service 5195f2
#undef LZO_DO16
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/*
Packit Service 5195f2
vi:ts=4:et
Packit Service 5195f2
*/