Commit 5eb2c03f authored by wax@mysql.com's avatar wax@mysql.com

Merge mysql.com:/home/wax/mysql/mysql-4.0

into mysql.com:/home/wax/mysql/mysql-4.0chsize
parents 5c1ce3c1 99df703b
......@@ -112,6 +112,7 @@ vva@eagle.mysql.r18.ru
vva@genie.(none)
walrus@kishkin.ru
walrus@mysql.com
wax@mysql.com
worm@altair.is.lan
zak@balfor.local
zak@linux.local
......
......@@ -276,6 +276,7 @@ inline double ulonglong2double(ulonglong value)
#define HAVE_ISAM /* We want to have support for ISAM in 4.0 */
#define HAVE_QUERY_CACHE
#define SPRINTF_RETURNS_INT
#define HAVE_SETFILEPOINTER /* SetFilePointer function for huge files */
#ifdef NOT_USED
#define HAVE_SNPRINTF /* Gave link error */
......
......@@ -36,24 +36,11 @@
0 Ok
1 Error
*/
int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags)
{
DBUG_ENTER("my_chsize");
DBUG_PRINT("my",("fd: %d length: %lu MyFlags: %d",fd,(ulong) newlength,
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 */
{
my_off_t oldsize;
......@@ -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));
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 (ftruncate(fd, (off_t) newlength))
......@@ -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_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