diff options
author | Xanadu <xanadu.xoroi@gmail.com> | 2011-03-05 00:50:00 +0100 |
---|---|---|
committer | Xanadu <xanadu.xoroi@gmail.com> | 2011-03-05 02:41:59 +0100 |
commit | c47c94f958dd11be44bad16cd5d97d9f2fea6dbf (patch) | |
tree | f4849f06a2b5bbda7036d07efde8d393ac54e620 /dep/mysqllite/mysys/my_read.c | |
parent | ed148818942fab299f344cb9c421a4df0b09fb98 (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.c | 25 |
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) |