diff --git a/src/lua/fio.lua b/src/lua/fio.lua index eda5be18abb4667b66aca35f721c58555823bcf7..b0b6d3a7280cd23a4f1f54ae75067a679d702793 100644 --- a/src/lua/fio.lua +++ b/src/lua/fio.lua @@ -1,6 +1,12 @@ -- fio.lua (internal file) local fio = require('fio') +local ffi = require('ffi') + +ffi.cdef[[ + int umask(int mask); +]] + local internal = fio.internal fio.internal = nil @@ -198,4 +204,18 @@ fio.basename = function(path, suffix) return path end +fio.umask = function(umask) + + if umask == nil then + local old = ffi.C.umask(0) + ffi.C.umask(old) + return old + end + + umask = tonumber(umask) + + return ffi.C.umask(tonumber(umask)) + +end + return fio diff --git a/test/box/fio.result b/test/box/fio.result index 3618943e97f6a6c1aec9d9093f5d8e19f00b34a9..1485c63ad1689a6263814b9a4919af3b1314692a 100644 --- a/test/box/fio.result +++ b/test/box/fio.result @@ -4,6 +4,15 @@ fio = require 'fio' errno = require 'errno' --- ... +-- umask +type(fio.umask(0)) +--- +- number +... +fio.umask() +--- +- 0 +... -- pathjoin fio.pathjoin('abc', 'cde') --- diff --git a/test/box/fio.test.lua b/test/box/fio.test.lua index ed510103951e86cd72d3c97316b6934b60f35813..c97c15965a5d0f12d9d25e1c279a69bb2e5c0d54 100644 --- a/test/box/fio.test.lua +++ b/test/box/fio.test.lua @@ -1,6 +1,11 @@ fio = require 'fio' errno = require 'errno' +-- umask + +type(fio.umask(0)) +fio.umask() + -- pathjoin fio.pathjoin('abc', 'cde') fio.pathjoin('/', 'abc')