Commit d4494c9f authored by unknown's avatar unknown

BUG

Add functions SetFilePointerEx and SetEndOfFile for huge 
tables instead of chsize
Move chsize to right place


include/config-win.h:
  add HAVE_SETFILEPOINTER
mysys/my_chsize.c:
  Add functions SetFilePointerEx and SetEndOfFile for huge tables
  Move chsize to right place
BitKeeper/etc/logging_ok:
  Logging to logging@openlogging.org accepted
parent e8d5bb18
...@@ -109,6 +109,7 @@ vva@eagle.mysql.r18.ru ...@@ -109,6 +109,7 @@ vva@eagle.mysql.r18.ru
vva@genie.(none) vva@genie.(none)
walrus@kishkin.ru walrus@kishkin.ru
walrus@mysql.com walrus@mysql.com
wax@mysql.com
worm@altair.is.lan worm@altair.is.lan
zak@balfor.local zak@balfor.local
zak@linux.local zak@linux.local
......
...@@ -276,6 +276,7 @@ inline double ulonglong2double(ulonglong value) ...@@ -276,6 +276,7 @@ inline double ulonglong2double(ulonglong value)
#define HAVE_ISAM /* We want to have support for ISAM in 4.0 */ #define HAVE_ISAM /* We want to have support for ISAM in 4.0 */
#define HAVE_QUERY_CACHE #define HAVE_QUERY_CACHE
#define SPRINTF_RETURNS_INT #define SPRINTF_RETURNS_INT
#define HAVE_SETFILEPOINTER /* SetFilePointer function for huge files */
#ifdef NOT_USED #ifdef NOT_USED
#define HAVE_SNPRINTF /* Gave link error */ #define HAVE_SNPRINTF /* Gave link error */
......
...@@ -36,24 +36,11 @@ ...@@ -36,24 +36,11 @@
0 Ok 0 Ok
1 Error 1 Error
*/ */
int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags) int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags)
{ {
DBUG_ENTER("my_chsize"); DBUG_ENTER("my_chsize");
DBUG_PRINT("my",("fd: %d length: %lu MyFlags: %d",fd,(ulong) newlength, DBUG_PRINT("my",("fd: %d length: %lu MyFlags: %d",fd,(ulong) newlength,
MyFlags)); MyFlags));
#ifdef HAVE_CHSIZE
if (chsize(fd,(off_t) newlength))
{
DBUG_PRINT("error",("errno: %d",errno));
my_errno=errno;
if (MyFlags & MY_WME)
my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),errno);
DBUG_RETURN(1);
}
DBUG_RETURN(0);
#else
/* if file is shorter, expand with null, else fill unused part with null */ /* if file is shorter, expand with null, else fill unused part with null */
{ {
my_off_t oldsize; my_off_t oldsize;
...@@ -62,7 +49,42 @@ int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags) ...@@ -62,7 +49,42 @@ int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags)
oldsize = my_seek(fd, 0L, MY_SEEK_END, MYF(MY_WME+MY_FAE)); oldsize = my_seek(fd, 0L, MY_SEEK_END, MYF(MY_WME+MY_FAE));
DBUG_PRINT("info",("old_size: %ld", (ulong) oldsize)); DBUG_PRINT("info",("old_size: %ld", (ulong) oldsize));
#ifdef HAVE_FTRUNCATE #ifdef HAVE_CHSIZE
if (oldsize > newlength || filler == 0)
{
if (chsize(fd,(off_t) newlength))
{
DBUG_PRINT("error",("errno: %d",errno));
my_errno=errno;
if (MyFlags & MY_WME)
my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),errno);
DBUG_RETURN(1);
}
else
{
if (filler == 0)
DBUG_RETURN(0);
}
}
#elif defined(HAVE_SETFILEPOINTER)
if (oldsize > newlength)
{
LARGE_INTEGER new_length;
HANDLE win_file;
win_file= (HANDLE)_get_osfhandle(fd);
new_length.QuadPart = newlength;
if (SetFilePointerEx(win_file,new_length,NULL,FILE_BEGIN))
{
if (SetEndOfFile(win_file))
DBUG_RETURN(0);
}
DBUG_PRINT("error",("errno: %d",errno));
my_errno=errno;
if (MyFlags & MY_WME)
my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),errno);
DBUG_RETURN(1);
}
#elif defined(HAVE_FTRUNCATE)
if (oldsize > newlength) if (oldsize > newlength)
{ {
if (ftruncate(fd, (off_t) newlength)) if (ftruncate(fd, (off_t) newlength))
...@@ -99,5 +121,6 @@ int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags) ...@@ -99,5 +121,6 @@ int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags)
DBUG_PRINT("error",("errno: %d",my_errno)); DBUG_PRINT("error",("errno: %d",my_errno));
DBUG_RETURN(1); DBUG_RETURN(1);
} }
#endif } /* my_chsize */
} /* my_chsize */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment