mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
branches/5.1:
Merge a part of r2911.5.5 from MySQL: (the other part of this was merged in c5700) ------------------------------------------------------------ revno: 2911.5.5 committer: Vladislav Vaintroub <vvaintroub@mysql.com> branch nick: 5.1-innodb_plugin timestamp: Wed 2009-06-10 10:59:49 +0200 message: Backport WL#3653 to 5.1 to enable bundled innodb plugin. Remove custom DLL loader code from innodb plugin code, use symbols exported from mysqld. removed: storage/innodb_plugin/handler/handler0vars.h storage/innodb_plugin/handler/win_delay_loader.cc added: storage/mysql_storage_engine.cmake win/create_def_file.js modified: CMakeLists.txt include/m_ctype.h include/my_global.h include/my_sys.h include/mysql/plugin.h libmysqld/CMakeLists.txt mysql-test/mysql-test-run.pl mysql-test/t/plugin.test mysql-test/t/plugin_load-master.opt mysys/charset.c sql/CMakeLists.txt sql/handler.h sql/mysql_priv.h sql/mysqld.cc sql/sql_class.cc sql/sql_class.h sql/sql_list.h sql/sql_profile.h storage/Makefile.am storage/archive/CMakeLists.txt storage/blackhole/CMakeLists.txt storage/csv/CMakeLists.txt storage/example/CMakeLists.txt storage/federated/CMakeLists.txt storage/heap/CMakeLists.txt storage/innobase/CMakeLists.txt storage/innobase/handler/ha_innodb.cc storage/innodb_plugin/CMakeLists.txt storage/innodb_plugin/handler/ha_innodb.cc storage/innodb_plugin/handler/handler0alter.cc storage/innodb_plugin/handler/i_s.cc storage/innodb_plugin/plug.in storage/myisam/CMakeLists.txt storage/myisammrg/CMakeLists.txt win/Makefile.am win/configure.js
This commit is contained in:
parent
ed1e80b3a4
commit
1a94ff5fd3
1 changed files with 95 additions and 0 deletions
|
@ -941,6 +941,100 @@ innobase_get_charset(
|
|||
return(thd_charset((THD*) mysql_thd));
|
||||
}
|
||||
|
||||
#if defined (__WIN__) && defined (MYSQL_DYNAMIC_PLUGIN)
|
||||
extern MYSQL_PLUGIN_IMPORT MY_TMPDIR mysql_tmpdir_list;
|
||||
/*******************************************************************//**
|
||||
Map an OS error to an errno value. The OS error number is stored in
|
||||
_doserrno and the mapped value is stored in errno) */
|
||||
extern "C"
|
||||
void __cdecl
|
||||
_dosmaperr(
|
||||
unsigned long); /*!< in: OS error value */
|
||||
|
||||
/*********************************************************************//**
|
||||
Creates a temporary file.
|
||||
@return temporary file descriptor, or < 0 on error */
|
||||
extern "C"
|
||||
int
|
||||
innobase_mysql_tmpfile(void)
|
||||
/*========================*/
|
||||
{
|
||||
int fd; /* handle of opened file */
|
||||
HANDLE osfh; /* OS handle of opened file */
|
||||
char* tmpdir; /* point to the directory
|
||||
where to create file */
|
||||
TCHAR path_buf[MAX_PATH - 14]; /* buffer for tmp file path.
|
||||
The length cannot be longer
|
||||
than MAX_PATH - 14, or
|
||||
GetTempFileName will fail. */
|
||||
char filename[MAX_PATH]; /* name of the tmpfile */
|
||||
DWORD fileaccess = GENERIC_READ /* OS file access */
|
||||
| GENERIC_WRITE
|
||||
| DELETE;
|
||||
DWORD fileshare = FILE_SHARE_READ /* OS file sharing mode */
|
||||
| FILE_SHARE_WRITE
|
||||
| FILE_SHARE_DELETE;
|
||||
DWORD filecreate = CREATE_ALWAYS; /* OS method of open/create */
|
||||
DWORD fileattrib = /* OS file attribute flags */
|
||||
FILE_ATTRIBUTE_NORMAL
|
||||
| FILE_FLAG_DELETE_ON_CLOSE
|
||||
| FILE_ATTRIBUTE_TEMPORARY
|
||||
| FILE_FLAG_SEQUENTIAL_SCAN;
|
||||
|
||||
DBUG_ENTER("innobase_mysql_tmpfile");
|
||||
|
||||
tmpdir = my_tmpdir(&mysql_tmpdir_list);
|
||||
|
||||
/* The tmpdir parameter can not be NULL for GetTempFileName. */
|
||||
if (!tmpdir) {
|
||||
uint ret;
|
||||
|
||||
/* Use GetTempPath to determine path for temporary files. */
|
||||
ret = GetTempPath(sizeof(path_buf), path_buf);
|
||||
if (ret > sizeof(path_buf) || (ret == 0)) {
|
||||
|
||||
_dosmaperr(GetLastError()); /* map error */
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
tmpdir = path_buf;
|
||||
}
|
||||
|
||||
/* Use GetTempFileName to generate a unique filename. */
|
||||
if (!GetTempFileName(tmpdir, "ib", 0, filename)) {
|
||||
|
||||
_dosmaperr(GetLastError()); /* map error */
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
DBUG_PRINT("info", ("filename: %s", filename));
|
||||
|
||||
/* Open/Create the file. */
|
||||
osfh = CreateFile(filename, fileaccess, fileshare, NULL,
|
||||
filecreate, fileattrib, NULL);
|
||||
if (osfh == INVALID_HANDLE_VALUE) {
|
||||
|
||||
/* open/create file failed! */
|
||||
_dosmaperr(GetLastError()); /* map error */
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
do {
|
||||
/* Associates a CRT file descriptor with the OS file handle. */
|
||||
fd = _open_osfhandle((intptr_t) osfh, 0);
|
||||
} while (fd == -1 && errno == EINTR);
|
||||
|
||||
if (fd == -1) {
|
||||
/* Open failed, close the file handle. */
|
||||
|
||||
_dosmaperr(GetLastError()); /* map error */
|
||||
CloseHandle(osfh); /* no need to check if
|
||||
CloseHandle fails */
|
||||
}
|
||||
|
||||
DBUG_RETURN(fd);
|
||||
}
|
||||
#else
|
||||
/*************************************************************************
|
||||
Creates a temporary file. */
|
||||
extern "C"
|
||||
|
@ -972,6 +1066,7 @@ innobase_mysql_tmpfile(void)
|
|||
}
|
||||
return(fd2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*************************************************************************
|
||||
Wrapper around MySQL's copy_and_convert function, see it for
|
||||
|
|
Loading…
Reference in a new issue