diff options
author | unknown <monty@mashka.mysql.fi> | 2003-01-09 03:55:26 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2003-01-09 03:55:26 +0200 |
commit | 9d812016c1287fe06a0c0715f0b2852c919cff82 (patch) | |
tree | af09adc5a3ec6814545553d72fda1d33e443d162 /myisam/mi_open.c | |
parent | cd2f741d5d2cc52928668c6ce1f77052d1ca8a3b (diff) | |
parent | cf2ef3c68f696707671a96c8a2ad6c8449390f4a (diff) | |
download | mariadb-git-9d812016c1287fe06a0c0715f0b2852c919cff82.tar.gz |
merge with 4.0.9
To get bug fixes for TCP/IP connections, FORCE INDEX and OPTIMIZE TABLE with NULL keys
client/mysqladmin.c:
Auto merged
client/mysqltest.c:
Auto merged
extra/Makefile.am:
Auto merged
include/my_base.h:
Auto merged
innobase/log/log0log.c:
Auto merged
myisam/ft_nlq_search.c:
Auto merged
myisam/mi_open.c:
Auto merged
myisam/myisamdef.h:
Auto merged
mysql-test/mysql-test-run.sh:
Auto merged
mysql-test/r/myisam.result:
Auto merged
sql/lex.h:
Auto merged
sql/log_event.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/opt_range.cc:
Auto merged
sql/protocol.cc:
Auto merged
sql/slave.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql-bench/crash-me.sh:
Auto merged
sql-bench/test-insert.sh:
Auto merged
sql/sql_show.cc:
Auto merged
sql/table.h:
Auto merged
configure.in:
merge with 4.0.9
innobase/btr/btr0pcur.c:
merge with 4.0.9
myisam/mi_check.c:
merge with 4.0.9
myisam/mi_search.c:
merge with 4.0.9
mysql-test/t/myisam.test:
merge with 4.0.9
sql/log_event.cc:
merge with 4.0.9
sql/mysql_priv.h:
merge with 4.0.9
sql/sql_lex.h:
merge with 4.0.9
sql/sql_parse.cc:
merge with 4.0.9
sql/sql_yacc.yy:
merge with 4.0.9
Diffstat (limited to 'myisam/mi_open.c')
-rw-r--r-- | myisam/mi_open.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/myisam/mi_open.c b/myisam/mi_open.c index 8f0da612c3a..ef1906e0c00 100644 --- a/myisam/mi_open.c +++ b/myisam/mi_open.c @@ -573,28 +573,36 @@ err: DBUG_RETURN (NULL); } /* mi_open */ + byte *mi_alloc_rec_buff(MI_INFO *info, ulong length, byte **buf) { uint extra; + uint32 old_length; + LINT_INIT(old_length); - if (! *buf || length > mi_get_rec_buff_len(info, *buf)) + if (! *buf || length > (old_length=mi_get_rec_buff_len(info, *buf))) { byte *newptr = *buf; /* to simplify initial init of info->rec_buf in mi_open and mi_extra */ if (length == (ulong) -1) + { length= max(info->s->base.pack_reclength+info->s->base.pack_bits, info->s->base.max_key_length); + /* Avoid unnecessary realloc */ + if (newptr && length == old_length) + return newptr; + } extra= ((info->s->options & HA_OPTION_PACK_RECORD) ? ALIGN_SIZE(MI_MAX_DYN_BLOCK_HEADER)+MI_SPLIT_LENGTH+ MI_REC_BUFF_OFFSET : 0); if (extra && newptr) - newptr-=MI_REC_BUFF_OFFSET; + newptr-= MI_REC_BUFF_OFFSET; if (!(newptr=(byte*) my_realloc((gptr)newptr, length+extra+8, MYF(MY_ALLOW_ZERO_PTR)))) return newptr; - *((uint *)newptr)=length; + *((uint32 *) newptr)= (uint32) length; *buf= newptr+(extra ? MI_REC_BUFF_OFFSET : 0); } return *buf; |