summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authoroskca <datago@yeah.net>2018-01-11 13:40:25 +0800
committeroskca <datago@yeah.net>2018-01-11 13:40:35 +0800
commit495331bf20d5c3147290f0393581c4bd7292c89c (patch)
tree301875ad665e41d31ded9d6afcd25f5e97af1f9f /lib
parente98a2051ce22c1f72c662e0c3e37597cbfaad6b0 (diff)
downloadNim-495331bf20d5c3147290f0393581c4bd7292c89c.tar.gz
raiseOSError to indicate the failling of findNextFile in walkDir[Rec]
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/os.nim10
-rw-r--r--lib/windows/winlean.nim1
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/pure/os.nim b/lib/pure/os.nim
index 689fc8d4a..1e3224537 100644
--- a/lib/pure/os.nim
+++ b/lib/pure/os.nim
@@ -672,7 +672,10 @@ template walkCommon(pattern: string, filter) =
           if dotPos < 0 or idx >= ff.len or ff[idx] == '.' or
               pattern[dotPos+1] == '*':
             yield splitFile(pattern).dir / extractFilename(ff)
-        if findNextFile(res, f) == 0'i32 and getLastError() == 18: break # ERROR_NO_MORE_FILES=18
+        if findNextFile(res, f) == 0'i32:
+          let errCode = getLastError()
+          if errCode == ERROR_NO_MORE_FILES: break
+          else: raiseOSError(errCode, "findNextFile failed")
   else: # here we use glob
     var
       f: Glob
@@ -782,7 +785,10 @@ iterator walkDir*(dir: string; relative=false): tuple[kind: PathComponent, path:
             let xx = if relative: extractFilename(getFilename(f))
                      else: dir / extractFilename(getFilename(f))
             yield (k, xx)
-          if findNextFile(h, f) == 0'i32 and getLastError() == 18: break # ERROR_NO_MORE_FILES=18
+          if findNextFile(res, f) == 0'i32:
+            let errCode = getLastError()
+            if errCode == ERROR_NO_MORE_FILES: break
+            else: raiseOSError(errCode, "findNextFile failed")
     else:
       var d = opendir(dir)
       if d != nil:
diff --git a/lib/windows/winlean.nim b/lib/windows/winlean.nim
index a833377e5..bd6e58a10 100644
--- a/lib/windows/winlean.nim
+++ b/lib/windows/winlean.nim
@@ -686,6 +686,7 @@ const
   ERROR_FILE_NOT_FOUND* = 2
   ERROR_PATH_NOT_FOUND* = 3
   ERROR_ACCESS_DENIED* = 5
+  ERROR_NO_MORE_FILES* = 18
   ERROR_HANDLE_EOF* = 38
   ERROR_BAD_ARGUMENTS* = 165