From 0657004da2bc9e7a1dcae754a219281605e40b56 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Tue, 13 Apr 2010 17:09:49 +0000 Subject: [PATCH] Ported debug file locking mechanism to win32 --- mk/windoze/Glest.suo | Bin 183296 -> 184832 bytes mk/windoze/glest_configurator.vcproj | 2 +- mk/windoze/glest_editor.vcproj | 2 +- source/shared_lib/sources/util/util.cpp | 17 +++++++++++------ 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/mk/windoze/Glest.suo b/mk/windoze/Glest.suo index a4dbdc267b806451fb96a8c2c33393da38827168..e435629d7caea701f2fec4f937826c9bf0946087 100755 GIT binary patch delta 3221 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 #include #include +#include // for open() -#ifndef WIN32 - #include // for open() -#else +#ifdef WIN32 #include // for open() + #include // for open() #endif #include "platform_util.h" @@ -44,12 +44,17 @@ string SystemFlags::lockfilename = ""; inline bool acquire_file_lock(int hnd) { +#ifndef WIN32 struct ::flock lock; lock.l_type = F_WRLCK; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = 0; return -1 != ::fcntl(hnd, F_SETLK, &lock); +#else + HANDLE hFile = (HANDLE)_get_osfhandle(hnd); + return true == ::LockFile(hFile, 0, 0, 0, -0x10000); +#endif } SystemFlags::SystemFlags() { @@ -66,7 +71,7 @@ void SystemFlags::Close() { SystemFlags::fileStream.close(); } if(SystemFlags::lockfilename != "") { - close(SystemFlags::lockFile); + _close(SystemFlags::lockFile); remove(SystemFlags::lockfilename.c_str()); SystemFlags::lockfilename = ""; } @@ -104,14 +109,14 @@ void SystemFlags::OutputDebug(DebugType type, const char *fmt, ...) { //SystemFlags::lockFile = open(lockfile.c_str(), O_WRONLY | O_CREAT | O_EXCL, S_IRUSR|S_IWUSR); - SystemFlags::lockFile = open(lockfile.c_str(), O_WRONLY | O_CREAT, S_IRUSR|S_IWUSR); + SystemFlags::lockFile = _open(lockfile.c_str(), O_WRONLY | O_CREAT, S_IREAD | S_IWRITE); if (SystemFlags::lockFile < 0 || acquire_file_lock(SystemFlags::lockFile) == false) { string newlockfile = lockfile; int idx = 1; for(idx = 1; idx <= 100; ++idx) { newlockfile = lockfile + intToStr(idx); //SystemFlags::lockFile = open(newlockfile.c_str(), O_WRONLY | O_CREAT | O_EXCL, S_IRUSR|S_IWUSR); - SystemFlags::lockFile = open(newlockfile.c_str(), O_WRONLY | O_CREAT, S_IRUSR|S_IWUSR); + SystemFlags::lockFile = _open(newlockfile.c_str(), O_WRONLY | O_CREAT, S_IREAD | S_IWRITE); if(SystemFlags::lockFile >= 0 && acquire_file_lock(SystemFlags::lockFile) == true) { break; }