diff --git a/include/my_sys.h b/include/my_sys.h
index 2df8dbc9e89a3fc3ff27265053a8b24199c59b8c..26bf31ae10d579a3dd2989c8b4d0efdca3bcb229 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -850,6 +850,7 @@ my_bool my_gethwaddr(uchar *to);
 #define PROT_WRITE       2
 #define MAP_NORESERVE    0
 #define MAP_SHARED       0x0001
+#define MAP_PRIVATE      0x0002
 #define MAP_NOSYNC       0x0800
 #define MAP_FAILED       ((void *)-1)
 #define MS_SYNC          0x0000
diff --git a/mysys/my_mmap.c b/mysys/my_mmap.c
index 21bfddae46c5a1a55eaefeedeff6e648ebcc3fc7..19d9541a9677d7bbe1c6dfe2296a68e8506079a3 100644
--- a/mysys/my_mmap.c
+++ b/mysys/my_mmap.c
@@ -43,22 +43,19 @@ int my_getpagesize(void)
 void *my_mmap(void *addr, size_t len, int prot,
                int flags, int fd, my_off_t offset)
 {
-  DWORD flProtect=0;
   HANDLE hFileMap;
   LPVOID ptr;
   HANDLE hFile= (HANDLE)_get_osfhandle(fd);
   if (hFile == INVALID_HANDLE_VALUE)
     return MAP_FAILED;
 
-  flProtect|=SEC_COMMIT;
-
   hFileMap=CreateFileMapping(hFile, &mmap_security_attributes,
                              PAGE_READWRITE, 0, (DWORD) len, NULL);
   if (hFileMap == 0)
     return MAP_FAILED;
 
   ptr=MapViewOfFile(hFileMap,
-                    flags & PROT_WRITE ? FILE_MAP_WRITE : FILE_MAP_READ,
+                    prot & PROT_WRITE ? FILE_MAP_WRITE : FILE_MAP_READ,
                     (DWORD)(offset >> 32), (DWORD)offset, len);
 
   /*
diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc
index 066a3011381406e8fda15f75366d7123d0963007..fed9394e91e654f363fcfbd40364f6741991475c 100644
--- a/storage/csv/ha_tina.cc
+++ b/storage/csv/ha_tina.cc
@@ -49,7 +49,6 @@
 #include "mysql_priv.h"
 
 #include "ha_tina.h"
-#include <sys/mman.h>
 
 #include <mysql/plugin.h>
 
@@ -143,7 +142,7 @@ int get_mmap(TINA_SHARE *share, int write)
       share->mapped_file= (byte *)my_mmap(NULL, share->file_stat.st_size,
                                           PROT_READ, MAP_PRIVATE,
                                           share->data_file, 0);
-    if ((share->mapped_file ==(caddr_t)-1))
+    if ((share->mapped_file == MAP_FAILED))
     {
       /*
         Bad idea you think? See the problem is that nothing actually checks
@@ -331,7 +330,7 @@ ha_tina::ha_tina(TABLE_SHARE *table_arg)
   records_is_known(0)
 {
   /* Set our original buffers from pre-allocated memory */
-  buffer.set(byte_buffer, IO_SIZE, system_charset_info);
+  buffer.set((char*)byte_buffer, IO_SIZE, system_charset_info);
   chain= chain_buffer;
 }
 
@@ -688,7 +687,8 @@ int ha_tina::write_row(byte * buf)
 
   size= encode_quote(buf);
 
-  if (my_write(share->data_file, buffer.ptr(), size, MYF(MY_WME | MY_NABP)))
+  if (my_write(share->data_file, (byte*)buffer.ptr(), size,
+               MYF(MY_WME | MY_NABP)))
     DBUG_RETURN(-1);
 
   /*
@@ -740,7 +740,8 @@ int ha_tina::update_row(const byte * old_data, byte * new_data)
   if (chain_append())
     DBUG_RETURN(-1);
 
-  if (my_write(share->data_file, buffer.ptr(), size, MYF(MY_WME | MY_NABP)))
+  if (my_write(share->data_file, (byte*)buffer.ptr(), size,
+               MYF(MY_WME | MY_NABP)))
     DBUG_RETURN(-1);
 
   /* UPDATE should never happen on the log tables */
@@ -934,7 +935,7 @@ int ha_tina::rnd_end()
   if ((chain_ptr - chain)  > 0)
   {
     tina_set *ptr;
-    off_t length;
+    size_t length;
 
     /*
       Setting up writable map, this will contain all of the data after the
@@ -958,15 +959,16 @@ int ha_tina::rnd_end()
       length= length - (size_t)(ptr->end - ptr->begin);
     }
 
-    /* Truncate the file to the new size */
-    if (my_chsize(share->data_file, length, 0, MYF(MY_WME)))
+    /* Unmap the file before the new size is set */
+    if (my_munmap(share->mapped_file, share->file_stat.st_size))
       DBUG_RETURN(-1);
+    /* We set it to null so that get_mmap() won't try to unmap it */
+    share->mapped_file= NULL;
 
-    if (my_munmap(share->mapped_file, length))
+    /* Set the file to the new size */
+    if (my_chsize(share->data_file, length, 0, MYF(MY_WME)))
       DBUG_RETURN(-1);
 
-    /* We set it to null so that get_mmap() won't try to unmap it */
-    share->mapped_file= NULL;
     if (get_mmap(share, 0) > 0)
       DBUG_RETURN(-1);
   }
@@ -986,6 +988,13 @@ int ha_tina::delete_all_rows()
   if (!records_is_known)
     return (my_errno=HA_ERR_WRONG_COMMAND);
 
+  /* Unmap the file before the new size is set */
+  if (share->mapped_file && my_munmap(share->mapped_file,
+                                      share->file_stat.st_size))
+    DBUG_RETURN(-1);
+  share->mapped_file= NULL;
+
+  /* Truncate the file to zero size */
   int rc= my_chsize(share->data_file, 0, 0, MYF(MY_WME));
 
   if (get_mmap(share, 0) > 0)
diff --git a/storage/csv/ha_tina.h b/storage/csv/ha_tina.h
index 572d05cb77957d3d3cd9bddfad6e805fd39e5dbd..dc743cf6514f2815953dfe70a8265f5722073fe3 100644
--- a/storage/csv/ha_tina.h
+++ b/storage/csv/ha_tina.h
@@ -41,9 +41,9 @@ typedef struct st_tina_share {
   THR_LOCK lock;
 } TINA_SHARE;
 
-typedef struct tina_set {
-	off_t begin;
-	off_t end;
+struct tina_set {
+  off_t begin;
+  off_t end;
 };
 
 class ha_tina: public handler