if(tf == NULL) { nextGame = appData.matchGames + 1; return; } // kludge to terminate match
safeStrCpy(buf, lastMsg, MSG_SIZ);
DisplayMessage(_("Pick new game"), "");
- flock(fileno(tf), LOCK_EX); // lock the tourney file while we are messing with it
+ if(flock(fileno(tf), LOCK_EX)) { // lock the tourney file while we are messing with it
+ abortMatch = TRUE; appData.matchMode = FALSE; DisplayError("Access to tourney file denied", 0);
+ fclose(tf); return;
+ }
ParseArgsFromFile(tf);
p = q = appData.results;
if(appData.debugMode) {
case WhiteSilver:\r
return PM_WSG;\r
case WhiteLance:\r
-\r
-\r
return PM_WL;\r
case WhiteFalcon:\r
return PM_WV;\r
\r
int flock(int fid, int code)\r
{\r
+ int res;\r
HANDLE hFile = (HANDLE) _get_osfhandle(fid);\r
OVERLAPPED ov;\r
ov.hEvent = NULL;\r
ov.Offset = 0;\r
ov.OffsetHigh = 0;\r
switch(code) {\r
- case 1: LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break; // LOCK_SH\r
-\r
- case 2: LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break; // LOCK_EX\r
- case 3: UnlockFileEx(hFile, 0, 1024, 0, &ov); break; // LOCK_UN\r
+ case 1: res = LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break; // LOCK_SH\r
+ case 2: res = LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break; // LOCK_EX\r
+ case 3: res = UnlockFileEx(hFile, 0, 1024, 0, &ov); break; // LOCK_UN\r
default: return -1;\r
}\r
- return 0;\r
+ return -!res;\r
}\r
\r
char *\r