summaryrefslogtreecommitdiff
path: root/myisam
diff options
context:
space:
mode:
authorunknown <svoj@april.(none)>2006-04-15 16:08:03 +0500
committerunknown <svoj@april.(none)>2006-04-15 16:08:03 +0500
commitbe4548d4a39c889bcf767b916fbf6aa45ca38a50 (patch)
tree5929aebee733a9f462ca371f43a68c9063cd079b /myisam
parentac0ec77832ddff5508d5a99a81b51c46d6038b9b (diff)
parenta875afd6c9095b38b97a6c1fc8dbc9d1451d798c (diff)
downloadmariadb-git-be4548d4a39c889bcf767b916fbf6aa45ca38a50.tar.gz
Merge april.(none):/home/svoj/devel/mysql/BUG17917/mysql-4.1
into april.(none):/home/svoj/devel/mysql/BUG17917/mysql-5.0 sql/mysqld.cc: Auto merged myisam/mi_packrec.c: Manual merge.
Diffstat (limited to 'myisam')
-rw-r--r--myisam/mi_packrec.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/myisam/mi_packrec.c b/myisam/mi_packrec.c
index e242e9d506d..41ab71204c4 100644
--- a/myisam/mi_packrec.c
+++ b/myisam/mi_packrec.c
@@ -1189,24 +1189,30 @@ my_bool _mi_memmap_file(MI_INFO *info)
MYISAM_SHARE *share=info->s;
DBUG_ENTER("mi_memmap_file");
- if (!info->s->file_map)
+ if (!share->file_map)
{
+ my_off_t data_file_length= share->state.state.data_file_length;
+ if (data_file_length > (my_off_t) (~((size_t) 0)) - MEMMAP_EXTRA_MARGIN)
+ {
+ DBUG_PRINT("warning", ("File is too large for mmap"));
+ DBUG_RETURN(0);
+ }
if (my_seek(info->dfile,0L,MY_SEEK_END,MYF(0)) <
- share->state.state.data_file_length+MEMMAP_EXTRA_MARGIN)
+ data_file_length + MEMMAP_EXTRA_MARGIN)
{
DBUG_PRINT("warning",("File isn't extended for memmap"));
DBUG_RETURN(0);
}
file_map=(byte*)
- my_mmap(0,(size_t)(share->state.state.data_file_length+MEMMAP_EXTRA_MARGIN),PROT_READ,
- MAP_SHARED | MAP_NORESERVE,info->dfile,0L);
+ my_mmap(0, (size_t) (data_file_length + MEMMAP_EXTRA_MARGIN), PROT_READ,
+ MAP_SHARED | MAP_NORESERVE, info->dfile, 0L);
if (file_map == (byte*) MAP_FAILED)
{
DBUG_PRINT("warning",("mmap failed: errno: %d",errno));
my_errno=errno;
DBUG_RETURN(0);
}
- info->s->file_map=file_map;
+ share->file_map= file_map;
}
info->opt_flag|= MEMMAP_USED;
info->read_record=share->read_record=_mi_read_mempack_record;