|
|
@ -1248,102 +1248,6 @@ innobase_get_lower_case_table_names(void) |
|
|
|
return(lower_case_table_names); |
|
|
|
} |
|
|
|
|
|
|
|
#if defined (__WIN__)
|
|
|
|
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" UNIV_INTERN |
|
|
|
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"); |
|
|
|
|
|
|
|
DBUG_EXECUTE_IF("innobase_tmpfile_creation_failure", return(-1);); |
|
|
|
|
|
|
|
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. |
|
|
|
@return temporary file descriptor, or < 0 on error */ |
|
|
@ -1400,7 +1304,6 @@ innobase_mysql_tmpfile(void) |
|
|
|
} |
|
|
|
return(fd2); |
|
|
|
} |
|
|
|
#endif /* defined (__WIN__) */
|
|
|
|
|
|
|
|
/*********************************************************************//**
|
|
|
|
Wrapper around MySQL's copy_and_convert function. |
|
|
|