summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
authorserg@serg.mylan <>2003-09-03 12:07:18 +0200
committerserg@serg.mylan <>2003-09-03 12:07:18 +0200
commit755455e15c341c2e86f3044b2dfa3dd49772f13c (patch)
tree84310e757264951823af695be9ae599473f79f1b /mysys
parentbd49884c1986235c93141c284d944e055dcb72d6 (diff)
parent2fcab1c2ee99a73718e14a56cbe7871bca8bd967 (diff)
downloadmariadb-git-755455e15c341c2e86f3044b2dfa3dd49772f13c.tar.gz
merged
Diffstat (limited to 'mysys')
-rw-r--r--mysys/Makefile.am2
-rw-r--r--mysys/checksum.c23
-rw-r--r--mysys/my_crc32.c36
3 files changed, 50 insertions, 11 deletions
diff --git a/mysys/Makefile.am b/mysys/Makefile.am
index 5b1c859cb2a..9e563755ebd 100644
--- a/mysys/Makefile.am
+++ b/mysys/Makefile.am
@@ -29,7 +29,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
mf_path.c mf_loadpath.c\
my_open.c my_create.c my_dup.c my_seek.c my_read.c \
my_pread.c my_write.c \
- mf_keycache.c \
+ mf_keycache.c my_crc32.c \
mf_iocache.c mf_iocache2.c mf_cache.c mf_tempfile.c \
mf_tempdir.c my_lock.c mf_brkhant.c my_alarm.c \
my_malloc.c my_realloc.c my_once.c mulalloc.c \
diff --git a/mysys/checksum.c b/mysys/checksum.c
index 1dd135c7ad9..664e768ef4e 100644
--- a/mysys/checksum.c
+++ b/mysys/checksum.c
@@ -19,19 +19,22 @@
#include "my_sys.h"
/*
- Calculate a long checksum for a memoryblock. Used to verify pack_isam
-
+ Calculate a long checksum for a memoryblock.
+
SYNOPSIS
- checksum()
- mem Pointer to memory block
- count Count of bytes
+ my_checksum()
+ crc start value for crc
+ pos pointer to memory block
+ length length of the block
*/
-ulong checksum(const byte *mem, uint count)
+ha_checksum my_checksum(ha_checksum crc, const byte *pos, uint length)
{
- ulong crc;
- for (crc= 0; count-- ; mem++)
- crc= ((crc << 1) + *((uchar*) mem)) +
- test(crc & ((ulong) 1L << (8*sizeof(ulong)-1)));
+/* const byte *end=pos+length;
+ for ( ; pos != end ; pos++)
+ crc=((crc << 8) + *((uchar*) pos)) + (crc >> (8*sizeof(ha_checksum)-8));
return crc;
+*/
+ return (ha_checksum)crc32((uint)crc, (const uchar *)pos, length);
}
+
diff --git a/mysys/my_crc32.c b/mysys/my_crc32.c
new file mode 100644
index 00000000000..5514b01ede2
--- /dev/null
+++ b/mysys/my_crc32.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include "mysys_priv.h"
+
+#ifndef HAVE_COMPRESS
+
+/* minimal set of defines for using crc32() from zlib codebase */
+#define _ZLIB_H
+#define ZEXPORT
+#define Z_NULL 0
+#define OF(args) args
+#undef DYNAMIC_CRC_TABLE
+typedef uchar Byte;
+typedef uchar Bytef;
+typedef uint uInt;
+typedef ulong uLong;
+typedef ulong uLongf;
+
+#include "../zlib/crc32.c"
+
+#endif
+