Commit 48260e9d authored by unknown's avatar unknown
Browse files

InnoDB portability fix: new function os_file_set_eof()


innobase/include/os0file.h:
  Add os_file_set_eof()
innobase/os/os0file.c:
  Add os_file_set_eof()
innobase/srv/srv0srv.c:
  Replace chsize() or ftruncate() with os_file_set_eof()
sql/ha_innodb.cc:
  Replace my_chsize() with os_file_set_eof()
parent 7d918f21
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -227,6 +227,14 @@ os_file_set_size(
				size */
	ulint		size_high);/* in: most significant 32 bits of size */
/***************************************************************************
Truncates a file at its current position. */

ibool
os_file_set_eof(
/*============*/
				/* out: TRUE if success */
	FILE*		file);	/* in: file to be truncated */
/***************************************************************************
Flushes the write buffers of a given file to the disk. */

ibool
+17 −0
Original line number Diff line number Diff line
@@ -1031,6 +1031,23 @@ os_file_set_size(
	return(FALSE);
}

/***************************************************************************
Truncates a file at its current position. */

ibool
os_file_set_eof(
/*============*/
				/* out: TRUE if success */
	FILE*		file)	/* in: file to be truncated */
{
#ifdef __WIN__
	HANDLE h = (HANDLE) _get_osfhandle(fileno(file));
	return(SetEndOfFile(h));
#else /* __WIN__ */
	return(!ftruncate(fileno(file), ftell(file)));
#endif /* __WIN__ */
}

/***************************************************************************
Flushes the write buffers of a given file to the disk. */

+1 −5
Original line number Diff line number Diff line
@@ -1609,11 +1609,7 @@ srv_lock_timeout_and_monitor_thread(
	    mutex_enter(&srv_monitor_file_mutex);
	    rewind(srv_monitor_file);
	    srv_printf_innodb_monitor(srv_monitor_file);
#ifdef __WIN__
	    chsize(fileno(srv_monitor_file), ftell(srv_monitor_file));
#else /* __WIN__ */
	    ftruncate(fileno(srv_monitor_file), ftell(srv_monitor_file));
#endif /* __WIN__ */
	    os_file_set_eof(srv_monitor_file);
	    mutex_exit(&srv_monitor_file_mutex);

	    if (srv_print_innodb_tablespace_monitor
+1 −1
Original line number Diff line number Diff line
@@ -4648,7 +4648,7 @@ innodb_show_status(
	rewind(srv_monitor_file);
	srv_printf_innodb_monitor(srv_monitor_file);
	flen = ftell(srv_monitor_file);
	my_chsize(fileno(srv_monitor_file), flen, 0, MYF(0));
	os_file_set_eof(srv_monitor_file);
	if(flen > 64000 - 1) {
		flen = 64000 - 1;
	}