summaryrefslogtreecommitdiff
path: root/innobase/os/os0file.c
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/os/os0file.c')
-rw-r--r--innobase/os/os0file.c44
1 files changed, 37 insertions, 7 deletions
diff --git a/innobase/os/os0file.c b/innobase/os/os0file.c
index 96f8f332066..7a6edd5a7c1 100644
--- a/innobase/os/os0file.c
+++ b/innobase/os/os0file.c
@@ -104,6 +104,38 @@ os_aio_array_t* os_aio_sync_array = NULL;
ulint os_aio_n_segments = ULINT_UNDEFINED;
/***************************************************************************
+Gets the operating system version. Currently works only on Windows. */
+
+ulint
+os_get_os_version(void)
+/*===================*/
+ /* out: OS_WIN95, OS_WIN31, OS_WINNT (2000 == NT) */
+{
+#ifdef __WIN__
+ OSVERSIONINFO os_info;
+
+ os_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+
+ ut_a(GetVersionEx(&os_info));
+
+ if (os_info.dwPlatformId == VER_PLATFORM_WIN32s) {
+ return(OS_WIN31);
+ } else if (os_info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
+ return(OS_WIN95);
+ } else if (os_info.dwPlatformId == VER_PLATFORM_WIN32_NT) {
+ return(OS_WINNT);
+ } else {
+ ut_error;
+ return(0);
+ }
+#else
+ ut_error;
+
+ return(0);
+#endif
+}
+
+/***************************************************************************
Retrieves the last error number if an error occurs in a file io function.
The number should be retrieved before any other OS calls (because they may
overwrite the error number). If the number is not known to this program,
@@ -438,13 +470,13 @@ os_file_set_size(
byte* buf;
try_again:
- /* We use a very big 16 MB buffer in writing because Linux is
+ /* We use a very big 8 MB buffer in writing because Linux may be
extremely slow in fdatasync on 1 MB writes */
- buf = ut_malloc(UNIV_PAGE_SIZE * 1024);
+ buf = ut_malloc(UNIV_PAGE_SIZE * 512);
/* Write buffer full of zeros */
- for (i = 0; i < UNIV_PAGE_SIZE * 1024; i++) {
+ for (i = 0; i < UNIV_PAGE_SIZE * 512; i++) {
buf[i] = '\0';
}
@@ -456,10 +488,10 @@ try_again:
UT_NOT_USED(size_high);
#endif
while (offset < low) {
- if (low - offset < UNIV_PAGE_SIZE * 1024) {
+ if (low - offset < UNIV_PAGE_SIZE * 512) {
n_bytes = low - offset;
} else {
- n_bytes = UNIV_PAGE_SIZE * 1024;
+ n_bytes = UNIV_PAGE_SIZE * 512;
}
ret = os_file_write(name, file, buf, offset, 0, n_bytes);
@@ -475,8 +507,6 @@ try_again:
ret = os_file_flush(file);
- fsync(file);
-
if (ret) {
return(TRUE);
}