summaryrefslogtreecommitdiff
path: root/myisam
diff options
context:
space:
mode:
authorunknown <ingo@mysql.com>2005-04-28 19:34:05 +0200
committerunknown <ingo@mysql.com>2005-04-28 19:34:05 +0200
commit45031a44546e1bf0092c9ddcde6b56d7357f3903 (patch)
tree4e65f44049751fec4d3ff85e114155f9fe894035 /myisam
parent745d52bb3da3afb018061b4e3ec34420a8475389 (diff)
parent275c8e77907791f62ed334d9cafaba8d734a4d33 (diff)
downloadmariadb-git-45031a44546e1bf0092c9ddcde6b56d7357f3903.tar.gz
Merge mysql.com:/home/mydev/mysql-4.1-4100
into mysql.com:/home/mydev/mysql-5.0-5000 include/my_sys.h: Auto merged myisam/myisampack.c: Auto merged sql/ha_myisammrg.cc: Auto merged
Diffstat (limited to 'myisam')
-rw-r--r--myisam/myisampack.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/myisam/myisampack.c b/myisam/myisampack.c
index 352c7954d72..74bb541b220 100644
--- a/myisam/myisampack.c
+++ b/myisam/myisampack.c
@@ -31,6 +31,7 @@
#define __GNU_LIBRARY__ /* Skip warnings in getopt.h */
#endif
#include <my_getopt.h>
+#include <assert.h>
#if INT_MAX > 32767
#define BITS_SAVED 32
@@ -1996,7 +1997,9 @@ static void write_bits (register ulong value, register uint bits)
{
reg3 uint byte_buff;
bits= (uint) -file_buffer.bits;
- byte_buff=file_buffer.current_byte | (uint) (value >> bits);
+ DBUG_ASSERT(bits <= 8 * sizeof(value));
+ byte_buff= (file_buffer.current_byte |
+ ((bits != 8 * sizeof(value)) ? (uint) (value >> bits) : 0));
#if BITS_SAVED == 32
*file_buffer.pos++= (byte) (byte_buff >> 24) ;
*file_buffer.pos++= (byte) (byte_buff >> 16) ;
@@ -2004,7 +2007,9 @@ static void write_bits (register ulong value, register uint bits)
*file_buffer.pos++= (byte) (byte_buff >> 8) ;
*file_buffer.pos++= (byte) byte_buff;
- value&=(1 << bits)-1;
+ DBUG_ASSERT(bits <= 8 * sizeof(ulong));
+ if (bits != 8 * sizeof(value))
+ value&= (((ulong) 1) << bits) - 1;
#if BITS_SAVED == 16
if (bits >= sizeof(uint))
{