diff options
author | unknown <guilhem@mysqlwin32.> | 2008-02-02 00:01:31 +0100 |
---|---|---|
committer | unknown <guilhem@mysqlwin32.> | 2008-02-02 00:01:31 +0100 |
commit | 4a1763e4287724421720e174f938d7303ad07c04 (patch) | |
tree | 31abb1520554ab9ab32a14cefc1c3ce72a6084f3 /mysys/my_pread.c | |
parent | 16f92309e43e431f60826bdbf4660d5ded157903 (diff) | |
download | mariadb-git-4a1763e4287724421720e174f938d7303ad07c04.tar.gz |
Fix for Windows-specific bugs:
- one which led REDO_INSERT_ROW_BLOBS to fail to apply
- one excess close ("-1 file left open")
Don't need maria-path option / environment variable.
Fixes for ma_test_all-t to run under Windows.
Port of ma_test_recovery to Perl, written by Jani.
storage/maria/unittest/ma_test_recovery.expected:
Rename: storage/maria/ma_test_recovery.expected -> storage/maria/unittest/ma_test_recovery.expected
mysys/my_pread.c:
Fix for Windows-specific bug (maria_read_log -a failed during
ma_test_all-t): Windows does not have pread() so the branch setting
HA_ERR_FILE_TOO_SHORT was not compiled in, broke applying of
REDO_INSERT_ROW_BLOBS. After fixing that, it appeared that in my
Windows machine, errno is not changed in case of EOF; as we read it
we have to reset it at start.
The changed to readbytes!=-1 is to detect EOF
mysys/my_read.c:
The change to readbytes!=-1 is to detect EOF
storage/maria/ma_loghandler.c:
Fix for Windows-specific bug: as we don't open the directory
we should not close it.
storage/maria/ma_page.c:
This is C, cannot declare variable after instruction.
storage/maria/ma_test_recovery:
ma_test_recovery.expected moved
storage/maria/unittest/ma_test_all-t:
Can now safely guess maria_path so don't need the command-line option
or environment variable. Port to Windows (.exe, different locations
of executables); can guess suffix, don't need --suffix.
storage/maria/unittest/ma_test_recovery.pl:
Perl version of ma_test_recovery, written by Jani. Will deprecate the
shell version.
Diffstat (limited to 'mysys/my_pread.c')
-rw-r--r-- | mysys/my_pread.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/mysys/my_pread.c b/mysys/my_pread.c index 7ad7a8faaf8..6b6957a24e5 100644 --- a/mysys/my_pread.c +++ b/mysys/my_pread.c @@ -47,7 +47,7 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, myf MyFlags) { size_t readbytes; - int error= 0; + int error= 0, save_errno; #ifndef DBUG_OFF char llbuf[22]; DBUG_ENTER("my_pread"); @@ -57,26 +57,25 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, #endif for (;;) { -#ifndef __WIN__ - errno=0; /* Linux doesn't reset this */ -#endif + errno=0; /* Linux, Windows don't reset this on EOF/success */ #ifndef HAVE_PREAD pthread_mutex_lock(&my_file_info[Filedes].mutex); readbytes= (uint) -1; error= (lseek(Filedes, offset, MY_SEEK_SET) == (my_off_t) -1 || (readbytes= read(Filedes, Buffer, Count)) != Count); + save_errno= errno; pthread_mutex_unlock(&my_file_info[Filedes].mutex); + if (error) + { + errno= save_errno; #else if ((error= ((readbytes= pread(Filedes, Buffer, Count, offset)) != Count))) { +#endif my_errno= errno; - if (errno == 0 || (readbytes == (size_t) -1 && + if (errno == 0 || (readbytes != (size_t) -1 && (MyFlags & (MY_NABP | MY_FNABP)))) my_errno= HA_ERR_FILE_TOO_SHORT; - } -#endif - if (error) - { DBUG_PRINT("warning",("Read only %d bytes off %u from %d, errno: %d", (int) readbytes, (uint) Count,Filedes,my_errno)); #ifdef THREAD |