errno.lua (567B)
1 local ffi = require("ffi") 2 3 local error = error 4 local ffi_c, ffi_errno, ffi_string = ffi.C, ffi.errno, ffi.string 5 6 ffi.cdef("char* strerror(int num);") 7 8 local module = {} 9 local function errno_error(name, errno, level) 10 errno = errno or ffi_errno() 11 local str = ffi_c.strerror(errno) 12 if not level then level = 1 end 13 error(name..": "..errno..": "..ffi_string(str), level+1) 14 end 15 module.error = errno_error 16 17 function module.assert(name, expr, level) 18 if not expr then 19 if not level then level = 1 end 20 errno_error(name, nil, level+1) 21 end 22 end 23 return module