From 1ae1b780f3010e46ac92f601789aac15ea806bee Mon Sep 17 00:00:00 2001 From: Brent Pedersen Date: Sun, 3 Mar 2019 16:15:00 -0700 Subject: [PATCH] raise error when error value from lib is non-zero --- tests/ziptests.nim | 7 +++++++ zip/zipfiles.nim | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/tests/ziptests.nim b/tests/ziptests.nim index b599a5f..f80ff9a 100644 --- a/tests/ziptests.nim +++ b/tests/ziptests.nim @@ -8,6 +8,8 @@ test "can compile zipfiles": test "zipfiles extractAll": var filename = "files/тест.xlsx" + if not fileExists(filename): + filename = "tests/files/тест.xlsx" var z: ZipArchive if not z.open(filename): echo "Opening zip failed" @@ -35,6 +37,11 @@ test "zipfiles read and write using Stream": check: outStream.data == "content" +test "non-zip file raises exception": + expect IOError: + var z: ZipArchive + check (not z.open("zzzzzzzz")) + test "zipfiles read and write archive comment": let filename = getTempDir() / "zipfiles_test_archive.zip" defer: filename.removeFile diff --git a/zip/zipfiles.nim b/zip/zipfiles.nim index 0009ede..d025dc4 100644 --- a/zip/zipfiles.nim +++ b/zip/zipfiles.nim @@ -39,6 +39,14 @@ proc open*(z: var ZipArchive, filename: string, mode: FileMode = fmRead): bool = z.w = zip_open(filename, flags, addr(err)) z.mode = mode result = z.w != nil + if err != 0: + var e: ref IOError + new(e) + var buf = newString(256) + var l = zip_error_to_str(buf.cstring, 256.csize, err.cint, 0) + buf.setLen(l) + e.msg = buf + raise e proc close*(z: var ZipArchive) = ## Closes a zip file.