Browse Source

Provide optional fcntl support for flock-less platforms like earlier SunOS.

tags/1.7.0
Filip Hajny 6 years ago
parent
commit
f56e890571
1 changed files with 26 additions and 0 deletions
  1. 26
    0
      src/lua/lua_util.c

+ 26
- 0
src/lua/lua_util.c View File

@@ -1614,6 +1614,15 @@ lua_util_lock_file (lua_State *L)
gint fd = -1;
gboolean own = FALSE;

#if !HAVE_FLOCK
struct flock fl = {
.l_type = F_WRLCK,
.l_whence = SEEK_SET,
.l_start = 0,
.l_len = 0
};
#endif

fpath = luaL_checkstring (L, 1);

if (fpath) {
@@ -1632,7 +1641,11 @@ lua_util_lock_file (lua_State *L)
return 2;
}

#if HAVE_FLOCK
if (flock (fd, LOCK_EX) == -1) {
#else
if (fcntl (fd, F_SETLKW, &fl) == -1) {
#endif
lua_pushnil (L);
lua_pushstring (L, strerror (errno));

@@ -1658,6 +1671,15 @@ lua_util_unlock_file (lua_State *L)
gint fd = -1, ret, serrno;
gboolean do_close = TRUE;

#if !HAVE_FLOCK
struct flock fl = {
.l_type = F_UNLCK,
.l_whence = SEEK_SET,
.l_start = 0,
.l_len = 0
};
#endif

if (lua_isnumber (L, 1)) {
fd = lua_tonumber (L, 1);

@@ -1665,7 +1687,11 @@ lua_util_unlock_file (lua_State *L)
do_close = lua_toboolean (L, 2);
}

#if HAVE_FLOCK
ret = flock (fd, LOCK_UN);
#else
ret = fcntl (fd, F_SETLKW, &fl);
#endif

if (do_close) {
serrno = errno;

Loading…
Cancel
Save