From 0f75b52ace1c08ea20ea3e538e62c9c04fc86ebd Mon Sep 17 00:00:00 2001 From: Tobias Ulmer Date: Wed, 13 Nov 2013 20:19:57 +0100 Subject: [PATCH] Improve eio error messages, keep the file name/fd around Signed-off-by: Tobias Ulmer --- generic/eio.lua | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/generic/eio.lua b/generic/eio.lua index 48f7716..8c93541 100644 --- a/generic/eio.lua +++ b/generic/eio.lua @@ -70,6 +70,8 @@ end function eio.new() local file = {} file.handle = false + file.finfo = false -- purely informative file name or descriptor string + -- for better error messages. return strict.lock(file) end @@ -89,6 +91,7 @@ function eio.fopen(path, mode) file = eio.new() file.handle = handle + file.finfo = string.format("file %q", path) return file end @@ -103,12 +106,13 @@ function eio.fdopen(fd, mode) handle, errstring = leio.fdopen(fd, mode) if not handle then return false, - err.new("could not open file descriptor %d with mode %q: %s", + err.new("could not open file descriptor #%d with mode %q: %s", fd, mode, errstring) end file = eio.new() file.handle = handle + file.finfo = string.format("file descriptor #%d", fd) return file end @@ -127,7 +131,7 @@ function eio.fclose(file) rc, errstring = leio.fclose(file.handle) file.handle = false if not rc then - return false, err.new("error closing file: %s", errstring) + return false, err.new("error closing %s: %s", file.finfo, errstring) end return true @@ -148,16 +152,16 @@ function eio.fread(file, size) end if type(size) ~= "number" then - return false, err.new("error reading file: size argument has wrong type") + return false, err.new("eio.fread: size argument has wrong type") end if size <= 0 or size > 2147483648 --[[2GB]] then - return false, err("error reading file: size argument out of range") + return false, err("eio.fread: size argument out of range") end buffer, errstring = leio.fread(file.handle, size) if not buffer then - return false, err.new("error reading file: %s", errstring) + return false, err.new("error reading %s: %s", file.finfo, errstring) end return buffer @@ -177,8 +181,8 @@ function eio.fgetc(file) char, errstring = leio.fgetc(file.handle) if not char then - return false, err.new("error reading character from file: %s", - errstring) + return false, err.new("error reading character from %s: %s", + file.finfo, errstring) end @@ -200,7 +204,7 @@ function eio.fwrite(file, buffer) rc, errstring = leio.fwrite(file.handle, buffer) if not rc then - return false, err.new("error writing file: %s", errstring) + return false, err.new("error writing %s: %s", file.finfo, errstring) end return true -- 2.39.5