1 /* Copyright (c) 2000, 2001, 2003-2007 MySQL AB
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; version 2 of the License.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 GNU General Public License for more details.
12 You should have received a copy of the GNU General Public License
13 along with this program; if not, write to the Free Software
14 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
16 /* Calculate a checksum for a row */
18 #include "myisamdef.h"
20 ha_checksum
mi_checksum(MI_INFO
*info
, const uchar
*buf
)
24 MI_COLUMNDEF
*rec
=info
->s
->rec
;
26 for (i
=info
->s
->base
.fields
; i
-- ; buf
+=(rec
++)->length
)
33 length
=_mi_calc_blob_length(rec
->length
-
34 portable_sizeof_char_ptr
,
36 memcpy((char*) &pos
, buf
+rec
->length
- portable_sizeof_char_ptr
,
42 uint pack_length
= HA_VARCHAR_PACKLENGTH(rec
->length
-1);
44 length
= (ulong
) *(uchar
*) buf
;
46 length
= uint2korr(buf
);
55 crc
=my_checksum(crc
, pos
? pos
: (uchar
*) "", length
);
61 ha_checksum
mi_static_checksum(MI_INFO
*info
, const uchar
*pos
)
63 return my_checksum(0, pos
, info
->s
->base
.reclength
);