summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com>2017-12-22 17:13:50 +0000
committerthetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com>2017-12-22 17:18:31 +0000
commit57fc8c67f827a41ab1278fd0d25b2566032da61a (patch)
tree7fbf93be23e4fca48b1367928ad249fdf05d2ad3
parenta2e183c6f3d76e809bbc2d6b596e7e000f06ee66 (diff)
downloadpipeworks-57fc8c67f827a41ab1278fd0d25b2566032da61a.tar
pipeworks-57fc8c67f827a41ab1278fd0d25b2566032da61a.tar.gz
pipeworks-57fc8c67f827a41ab1278fd0d25b2566032da61a.tar.bz2
pipeworks-57fc8c67f827a41ab1278fd0d25b2566032da61a.tar.xz
pipeworks-57fc8c67f827a41ab1278fd0d25b2566032da61a.zip
teleport_tube.lua: fix 32-bit clamping issues on some systems for %d in string.format
Some servers running ubuntu in particular were reporting issues with teleport tubes not working. On investigation, all tube entries were colliding as string.format("%d", ...) was returning either -2^31 or 2^31-1 depending on system bit width, causing hash entries to be overwritten. This is possibly related to the use of C sprintf within lua. Fix this by using %g instead to interpret as double without int conversion, with a large enough number of digits such that all possible 2^48 values from minetest.hash_node_position() can be correctly serialised.
-rw-r--r--teleport_tube.lua2
1 files changed, 1 insertions, 1 deletions
diff --git a/teleport_tube.lua b/teleport_tube.lua
index bb364db..9a66de2 100644
--- a/teleport_tube.lua
+++ b/teleport_tube.lua
@@ -4,7 +4,7 @@ local tp_tube_db = nil -- nil forces a read
local tp_tube_db_version = 2.0
local function hash(pos)
- return string.format("%d", minetest.hash_node_position(pos))
+ return string.format("%.30g", minetest.hash_node_position(pos))
end
local function save_tube_db()