(ef_open): Lock the file. This prevents two programs (servers in

particular) running on the same game state.  fairland does not use
ef_open() at this time, and thus ignores the lock.
This commit is contained in:
Markus Armbruster 2006-08-02 18:05:04 +00:00
parent 18417fdef6
commit de124108de

View file

@ -66,6 +66,7 @@ int
ef_open(int type, int how)
{
struct empfile *ep;
struct flock lock;
int oflags, fd, fsiz, size;
if (ef_check(type) < 0)
@ -90,6 +91,14 @@ ef_open(int type, int how)
return 0;
}
lock.l_type = how & EFF_RDONLY ? F_RDLCK : F_WRLCK;
lock.l_whence = SEEK_SET;
lock.l_start = lock.l_len = 0;
if (fcntl(fd, F_SETLK, &lock) == -1) {
logerror("Can't lock %s (%s)", ep->file, strerror(errno));
return 0;
}
/* get file size */
fsiz = fsize(fd);
if (fsiz % ep->size) {