mirror of
https://github.com/MariaDB/server.git
synced 2025-01-23 23:34:34 +01:00
ce8de7afdf
-new option WITH_MARIA_STORAGE_ENGINE for config.js -correct build errors -build test executables -downport changes for atomic functions from 5.2 -remove LOCK_uuid_generator from C++ files to avoid linker errors -new function my_uuid2str() BitKeeper/deleted/.del-x86-msvc.h: Delete: include/atomic/x86-msvc.h CMakeLists.txt: Windows fixes: -New option WITH_MARIA_STORAGE_ENGINE -Add unit tests include/Makefile.am: replace x86-msvc.h with generic-msvc.h include/config-win.h: my_chmod() support include/my_atomic.h: Downport my_atomic from 5.2 tree include/my_bit.h: Correct unresolved symbol errors on Windows include/my_pthread.h: pthread_mutex_unlock now returns 0 (was void previously) defined PTHREAD_STACK_MIN include/my_sys.h: New function my_uuid2str() define MY_UUID_STRING_LENGTH include/atomic/nolock.h: Downport my_atomic from 5.2 tree libmysqld/CMakeLists.txt: New option WITH_MARIA_STORAGE_ENGINE mysys/CMakeLists.txt: Add missing files mysys/lf_dynarray.c: Fix compiler errors on Windows mysys/my_getncpus.c: Windows port mysys/my_uuid.c: Windows fixes: there is no random() on Windows, use ANSI rand() New function my_uuid2str() mysys/my_winthread.c: Downport from 5.2 tree -Call my_thread_end() before pthread_exit() -Avoid crash if pthread_create is called with NULL attributes sql/CMakeLists.txt: Link mysqld with Maria storage engine sql/item_func.cc: Remove LOCK_uuid_generator from C++ to avoid linker errors. Use dedicated mutex for short uuids sql/item_strfunc.cc: Use my_uuid() and my_uuid2str() functions from mysys. sql/item_strfunc.h: Define MY_UUID_STRING_LENGTH in my_sys.h sql/mysql_priv.h: LOCK_uuid_generator must be declared as extern "C" sql/mysqld.cc: Init and destroy LOCK_uuid_short mutex storage/maria/CMakeLists.txt: -Use the same source files as in Makefile.am -Build test binaries storage/maria/ha_maria.cc: snprintf->my_snprintf storage/maria/lockman.c: Fix compiler error on Windows storage/maria/ma_check.c: Fix compiler error on Windows storage/maria/ma_loghandler.c: Fix compile errors my_open()/my_sync() do not work for directories on Windows storage/maria/ma_recovery.c: Fix compile error on Windows storage/maria/ma_test2.c: Rename variable to avoid naming conflict with Microsoft C runtime function storage/maria/ma_test3.c: Fix build errors on Windows storage/maria/tablockman.c: Fix build errors on Windows storage/maria/unittest/Makefile.am: Add CMakeLists.txt storage/maria/unittest/ma_pagecache_consist.c: Fix build errors on Windows remove loop from get_len() storage/maria/unittest/ma_pagecache_single.c: Fix build errors on Windows storage/maria/unittest/ma_test_loghandler-t.c: Windows fixes -Avoid division by 0 in expressions like x/(RAND_MAX/y), where y is larger than RAND_MAX(==0x7fff on Windows) storage/maria/unittest/ma_test_loghandler_multigroup-t.c: Windows fixes -Avoid division by 0 in expressions like x/(RAND_MAX/y), where y is larger than RAND_MAX(==0x7fff on Windows) -remove loop in get_len() storage/maria/unittest/ma_test_loghandler_multithread-t.c: Windows fixes -Avoid division by 0 in expressions like x/(RAND_MAX/y), where y is larger than RAND_MAX(==0x7fff on Windows) -remove loop in get_len() storage/maria/unittest/ma_test_loghandler_noflush-t.c: Fix build errors on Windows storage/maria/unittest/test_file.c: Correct the code to get file size on Windows. stat() information can be outdated and thus cannot be trusted. On Vista,stat() returns file size=0 until the file is closed at the first time. storage/myisam/CMakeLists.txt: Fix compiler errors on Windows Build test executables storage/myisam/mi_test2.c: Rename variable to avoid naming conflict with Microsoft C runtime function storage/myisam/mi_test3.c: Fix build errors on Windows strings/CMakeLists.txt: Add missing file unittest/unit.pl: Windows: downport unittest changes from 5.2 bk tree unittest/mysys/Makefile.am: Windows: downport unittest changes from 5.2 bk tree unittest/mysys/my_atomic-t.c: Windows: downport unittest changes from 5.2 bk tree unittest/mytap/Makefile.am: Windows: downport unittest changes from 5.2 bk tree unittest/mytap/tap.c: Windows: downport unittest changes from 5.2 bk tree win/configure.js: Add WITH_MARIA_STORAGE_ENGINE configure option unittest/mytap/CMakeLists.txt: Add missing file unittest/mysys/CMakeLists.txt: Add missing file storage/maria/unittest/CMakeLists.txt: Add missing file BitKeeper/etc/ignore: Added comments maria-win.patch to the ignore list include/atomic/generic-msvc.h: Implement atomic operations with MSVC intrinsics
103 lines
2.7 KiB
C
103 lines
2.7 KiB
C
#include <tap.h>
|
|
#include <my_sys.h>
|
|
#include <my_dir.h>
|
|
#include "test_file.h"
|
|
|
|
|
|
/*
|
|
Check that file contance correspond to descriptor
|
|
|
|
SYNOPSIS
|
|
test_file()
|
|
file File to test
|
|
file_name Path (and name) of file which is tested
|
|
size size of file
|
|
buff_size size of buffer which is enought to check the file
|
|
desc file descriptor to check with
|
|
|
|
RETURN
|
|
1 file if OK
|
|
0 error
|
|
*/
|
|
|
|
int test_file(PAGECACHE_FILE file, char *file_name,
|
|
off_t size, size_t buff_size, struct file_desc *desc)
|
|
{
|
|
unsigned char *buffr= my_malloc(buff_size, MYF(0));
|
|
off_t pos= 0;
|
|
size_t byte;
|
|
int step= 0;
|
|
int res= 1; /* ok */
|
|
|
|
#ifdef __WIN__
|
|
/*
|
|
On Windows, the info returned by stat(), specifically file length
|
|
is not necessarily current, because this is the behavior of
|
|
underlying FindFirstFile() function.
|
|
*/
|
|
WIN32_FILE_ATTRIBUTE_DATA file_attr;
|
|
LARGE_INTEGER li;
|
|
if(GetFileAttributesEx(file_name, GetFileExInfoStandard, &file_attr) == 0)
|
|
{
|
|
diag("Can't GetFileAttributesEx %s (errno: %d)\n", file_name,
|
|
GetLastError());
|
|
res= 0;
|
|
goto err;
|
|
}
|
|
li.HighPart= file_attr.nFileSizeHigh;
|
|
li.LowPart= file_attr.nFileSizeLow;
|
|
if(li.QuadPart != size)
|
|
{
|
|
diag("file %s size is %llu (should be %llu)\n",
|
|
file_name, (ulonglong)size, (ulonglong)li.QuadPart);
|
|
res= 0; /* failed */
|
|
/* continue to get more information */
|
|
}
|
|
#else
|
|
MY_STAT stat_buff, *stat;
|
|
if ((stat= my_stat(file_name, &stat_buff, MYF(0))) == NULL)
|
|
{
|
|
diag("Can't stat() %s (errno: %d)\n", file_name, errno);
|
|
res= 0;
|
|
goto err;
|
|
}
|
|
if (stat->st_size != size)
|
|
{
|
|
diag("file %s size is %lu (should be %lu)\n",
|
|
file_name, (ulong) stat->st_size, (ulong) size);
|
|
res= 0; /* failed */
|
|
/* continue to get more information */
|
|
}
|
|
#endif
|
|
|
|
/* check content */
|
|
my_seek(file.file, 0, SEEK_SET, MYF(MY_WME));
|
|
while (desc[step].length != 0)
|
|
{
|
|
if (my_read(file.file, (char*)buffr, desc[step].length, MYF(0)) !=
|
|
desc[step].length)
|
|
{
|
|
diag("Can't read %u bytes from %s (file: %d errno: %d)\n",
|
|
(uint)desc[step].length, file_name, file.file, errno);
|
|
res= 0;
|
|
goto err;
|
|
}
|
|
for (byte= 0; byte < desc[step].length; byte++)
|
|
{
|
|
if (buffr[byte] != desc[step].content)
|
|
{
|
|
diag("content of %s mismatch 0x%x in position %lu instead of 0x%x\n",
|
|
file_name, (uint) buffr[byte], (ulong) (pos + byte),
|
|
desc[step].content);
|
|
res= 0;
|
|
goto err;
|
|
}
|
|
}
|
|
pos+= desc[step].length;
|
|
step++;
|
|
}
|
|
|
|
err:
|
|
my_free(buffr, 0);
|
|
return res;
|
|
}
|