aboutsummaryrefslogtreecommitdiff
path: root/dep/mysqllite/mysys/my_read.c
diff options
context:
space:
mode:
authorXanadu <xanadu.xoroi@gmail.com>2011-03-05 00:50:00 +0100
committerXanadu <xanadu.xoroi@gmail.com>2011-03-05 02:41:59 +0100
commitc47c94f958dd11be44bad16cd5d97d9f2fea6dbf (patch)
treef4849f06a2b5bbda7036d07efde8d393ac54e620 /dep/mysqllite/mysys/my_read.c
parented148818942fab299f344cb9c421a4df0b09fb98 (diff)
Dep/MySQL: Updated MySQL sources to version 5.5.9 (current GA)
Diffstat (limited to 'dep/mysqllite/mysys/my_read.c')
-rw-r--r--dep/mysqllite/mysys/my_read.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/dep/mysqllite/mysys/my_read.c b/dep/mysqllite/mysys/my_read.c
index 0c302d5b227..dbe9006a1d3 100644
--- a/dep/mysqllite/mysys/my_read.c
+++ b/dep/mysqllite/mysys/my_read.c
@@ -15,9 +15,9 @@
#include "mysys_priv.h"
#include "mysys_err.h"
+#include <my_base.h>
#include <errno.h>
-
/*
Read a chunk of bytes from a file with retry's if needed
@@ -37,27 +37,36 @@ size_t my_read(File Filedes, uchar *Buffer, size_t Count, myf MyFlags)
{
size_t readbytes, save_count;
DBUG_ENTER("my_read");
- DBUG_PRINT("my",("Fd: %d Buffer: 0x%lx Count: %lu MyFlags: %d",
- Filedes, (long) Buffer, (ulong) Count, MyFlags));
+ DBUG_PRINT("my",("fd: %d Buffer: %p Count: %lu MyFlags: %d",
+ Filedes, Buffer, (ulong) Count, MyFlags));
save_count= Count;
for (;;)
{
- errno= 0; /* Linux doesn't reset this */
- if ((readbytes= read(Filedes, Buffer, (uint) Count)) != Count)
+ errno= 0; /* Linux, Windows don't reset this on EOF/success */
+#ifdef _WIN32
+ readbytes= my_win_read(Filedes, Buffer, Count);
+#else
+ readbytes= read(Filedes, Buffer, Count);
+#endif
+
+ if (readbytes != Count)
{
- my_errno= errno ? errno : -1;
+ my_errno= errno;
+ if (errno == 0 || (readbytes != (size_t) -1 &&
+ (MyFlags & (MY_NABP | MY_FNABP))))
+ my_errno= HA_ERR_FILE_TOO_SHORT;
DBUG_PRINT("warning",("Read only %d bytes off %lu from %d, errno: %d",
(int) readbytes, (ulong) Count, Filedes,
my_errno));
-#ifdef THREAD
+
if ((readbytes == 0 || (int) readbytes == -1) && errno == EINTR)
{
DBUG_PRINT("debug", ("my_read() was interrupted and returned %ld",
(long) readbytes));
continue; /* Interrupted */
}
-#endif
+
if (MyFlags & (MY_WME | MY_FAE | MY_FNABP))
{
if (readbytes == (size_t) -1)