• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* lzo_util.c -- utilities for the LZO library
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@oberhumer.com>
25    http://www.oberhumer.com/opensource/lzo/
26  */
27 
28 
29 #include "lzo_conf.h"
30 
31 
32 /***********************************************************************
33 //
34 ************************************************************************/
35 
36 /* If you use the LZO library in a product, I would appreciate that you
37  * keep this copyright string in the executable of your product.
38 .*/
39 
40 static const char __lzo_copyright[] =
41 #if !defined(__LZO_IN_MINLZO)
42     /* save space as some people want a really small decompressor */
43     LZO_VERSION_STRING;
44 #else
45     "\r\n\n"
46     "LZO data compression library.\n"
47     "$Copyright: LZO Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer\n"
48     "<markus@oberhumer.com>\n"
49     "http://www.oberhumer.com $\n\n"
50     "$Id: LZO version: v" LZO_VERSION_STRING ", " LZO_VERSION_DATE " $\n"
51     "$Info: " LZO_INFO_STRING " $\n";
52 #endif
53 
54 
55 LZO_PUBLIC(const lzo_bytep)
lzo_copyright(void)56 lzo_copyright(void)
57 {
58     return (const lzo_bytep) __lzo_copyright;
59 }
60 
61 LZO_PUBLIC(unsigned)
lzo_version(void)62 lzo_version(void)
63 {
64     return LZO_VERSION;
65 }
66 
67 LZO_PUBLIC(const char *)
lzo_version_string(void)68 lzo_version_string(void)
69 {
70     return LZO_VERSION_STRING;
71 }
72 
73 LZO_PUBLIC(const char *)
lzo_version_date(void)74 lzo_version_date(void)
75 {
76     return LZO_VERSION_DATE;
77 }
78 
79 LZO_PUBLIC(const lzo_charp)
_lzo_version_string(void)80 _lzo_version_string(void)
81 {
82     return LZO_VERSION_STRING;
83 }
84 
85 LZO_PUBLIC(const lzo_charp)
_lzo_version_date(void)86 _lzo_version_date(void)
87 {
88     return LZO_VERSION_DATE;
89 }
90 
91 
92 /***********************************************************************
93 // adler32 checksum
94 // adapted from free code by Mark Adler <madler@alumni.caltech.edu>
95 // see http://www.zlib.org/
96 ************************************************************************/
97 
98 #define LZO_BASE 65521u /* largest prime smaller than 65536 */
99 #define LZO_NMAX 5552
100 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
101 
102 #define LZO_DO1(buf,i)  s1 += buf[i]; s2 += s1
103 #define LZO_DO2(buf,i)  LZO_DO1(buf,i); LZO_DO1(buf,i+1);
104 #define LZO_DO4(buf,i)  LZO_DO2(buf,i); LZO_DO2(buf,i+2);
105 #define LZO_DO8(buf,i)  LZO_DO4(buf,i); LZO_DO4(buf,i+4);
106 #define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8);
107 
108 LZO_PUBLIC(lzo_uint32_t)
lzo_adler32(lzo_uint32_t adler,const lzo_bytep buf,lzo_uint len)109 lzo_adler32(lzo_uint32_t adler, const lzo_bytep buf, lzo_uint len)
110 {
111     lzo_uint32_t s1 = adler & 0xffff;
112     lzo_uint32_t s2 = (adler >> 16) & 0xffff;
113     unsigned k;
114 
115     if (buf == NULL)
116         return 1;
117 
118     while (len > 0)
119     {
120         k = len < LZO_NMAX ? (unsigned) len : LZO_NMAX;
121         len -= k;
122         if (k >= 16) do
123         {
124             LZO_DO16(buf,0);
125             buf += 16;
126             k -= 16;
127         } while (k >= 16);
128         if (k != 0) do
129         {
130             s1 += *buf++;
131             s2 += s1;
132         } while (--k > 0);
133         s1 %= LZO_BASE;
134         s2 %= LZO_BASE;
135     }
136     return (s2 << 16) | s1;
137 }
138 
139 #undef LZO_DO1
140 #undef LZO_DO2
141 #undef LZO_DO4
142 #undef LZO_DO8
143 #undef LZO_DO16
144 
145 
146 /*
147 vi:ts=4:et
148 */
149