summaryrefslogtreecommitdiff
path: root/myisam/mi_open.c
diff options
context:
space:
mode:
authorunknown <monty@mashka.mysql.fi>2003-01-09 03:55:26 +0200
committerunknown <monty@mashka.mysql.fi>2003-01-09 03:55:26 +0200
commit9d812016c1287fe06a0c0715f0b2852c919cff82 (patch)
treeaf09adc5a3ec6814545553d72fda1d33e443d162 /myisam/mi_open.c
parentcd2f741d5d2cc52928668c6ce1f77052d1ca8a3b (diff)
parentcf2ef3c68f696707671a96c8a2ad6c8449390f4a (diff)
downloadmariadb-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.c14
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;