]> source.dussan.org Git - rspamd.git/commitdiff
Provide optional fcntl support for flock-less platforms like earlier SunOS. 2009/head
authorFilip Hajny <filip@hajny.net>
Thu, 1 Feb 2018 13:28:45 +0000 (14:28 +0100)
committerFilip Hajny <filip@hajny.net>
Thu, 1 Feb 2018 13:28:45 +0000 (14:28 +0100)
src/lua/lua_util.c

index cb8d178495ea056b0a1062d0ec5121f6f417a484..222a48f354286dce3a40f0929a49ed70db4e7e8a 100644 (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;