Commit 2c140ed3 authored by vasil's avatar vasil

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
parent b8a2d8f2
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment