summaryrefslogtreecommitdiff
path: root/innobase/os
diff options
context:
space:
mode:
authorunknown <marko@hundin.mysql.fi>2004-08-06 15:55:50 +0300
committerunknown <marko@hundin.mysql.fi>2004-08-06 15:55:50 +0300
commitfc4364e3509f9fa625e65f9e124b8133aa103f76 (patch)
treec1d7d9cd3e693926714ec72a5dba2d8ea59dde2d /innobase/os
parent06cd2efc2e231d0526091e3e9e4dc47985a8081c (diff)
downloadmariadb-git-fc4364e3509f9fa625e65f9e124b8133aa103f76.tar.gz
InnoDB: Add option for disabling innodb_status.<pid> files.
InnoDB: Implement tmpfile() differently on Windows (Bug #3998) innobase/dict/dict0dict.c: Check the return value of os_file_create_tmpfile(), as it can now return NULL innobase/include/os0file.h: Note that os_file_create_tmpfile() can now return NULL innobase/include/srv0srv.h: Add a new server flag (srv_innodb_status) to disable the creation of innodb_status.<pid> files innobase/lock/lock0lock.c: Check the return value of os_file_create_tmpfile(), as it can now return NULL innobase/os/os0file.c: os_file_create_tmpfile(): separate implementation for Win32; errors will be reported but will not cause assertion failure innobase/srv/srv0srv.c: Add a new server flag (srv_innodb_status) to disable the creation of innodb_status.<pid> files innobase/srv/srv0start.c: innobase_start_or_create_for_mysql(): create srv_monitor_file with tmpfile() or with a visible name "innodb_status.<pid>", depending on the setting of the flag srv_innodb_status. sql/ha_innodb.cc: innobase_init(): initialize srv_innodb_status update_table_comment(), get_foreign_key_create_info(): replace tmpfile() with os_file_create_tmpfile() sql/ha_innodb.h: Add new Boolean flag, innobase_create_status_file. sql/mysqld.cc: Add new Boolean flag, innodb_status_file
Diffstat (limited to 'innobase/os')
-rw-r--r--innobase/os/os0file.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/innobase/os/os0file.c b/innobase/os/os0file.c
index a70333ba6ab..c33066b1476 100644
--- a/innobase/os/os0file.c
+++ b/innobase/os/os0file.c
@@ -377,16 +377,33 @@ Creates a temporary file. In case of error, causes abnormal termination. */
FILE*
os_file_create_tmpfile(void)
/*========================*/
- /* out: temporary file handle (never NULL) */
+ /* out: temporary file handle, or NULL */
{
- FILE* file = tmpfile();
+ FILE* file;
+#ifdef __WIN__
+ int fd = -1;
+ char* name;
+ file = NULL;
+ if (NULL == (name = tempnam(fil_path_to_mysql_datadir, "ib"))
+ || -1 == (fd = _open(name, _O_CREAT | _O_EXCL | _O_RDWR
+ | _O_SEQUENTIAL | _O_SHORT_LIVED | _O_TEMPORARY))
+ || NULL == (file = fdopen(fd, "w+b"))) {
+ ut_print_timestamp(stderr);
+ fprintf(stderr, " InnoDB: Error: unable to create"
+ " temporary file %s\n", name ? name : "name");
+ if (fd != -1) {
+ _close(fd);
+ }
+ }
+ free(name);
+#else /* __WIN__ */
+ file = tmpfile();
if (file == NULL) {
ut_print_timestamp(stderr);
fputs(" InnoDB: Error: unable to create temporary file\n",
stderr);
- os_file_handle_error(NULL, "tmpfile");
- ut_error;
}
+#endif /* __WIN__ */
return(file);
}