summary refs log tree commit diff stats
diff options
context:
space:
mode:
authoralaviss <alaviss@users.noreply.github.com>2018-10-09 20:37:36 +0700
committerAndreas Rumpf <rumpf_a@web.de>2018-10-09 15:37:36 +0200
commitdad290accbd547cbbe0b83592c115b09ed2624f8 (patch)
tree527d60c7ce8d1b9e74094334014f7527172fcc7a
parentc0266e1afa0cde01d3aca1d717c7200dfb977b86 (diff)
downloadNim-dad290accbd547cbbe0b83592c115b09ed2624f8.tar.gz
os: use unlink() to remove file (#9220)
removeFile() behavior should now be consistant between Windows and POSIX

Fixes #9200
-rw-r--r--lib/pure/os.nim4
-rw-r--r--tests/stdlib/tos.nim9
2 files changed, 10 insertions, 3 deletions
diff --git a/lib/pure/os.nim b/lib/pure/os.nim
index a9183e1fa..6d1af04c8 100644
--- a/lib/pure/os.nim
+++ b/lib/pure/os.nim
@@ -33,8 +33,6 @@ else:
 import ospaths
 export ospaths
 
-proc c_remove(filename: cstring): cint {.
-  importc: "remove", header: "<stdio.h>".}
 proc c_rename(oldname, newname: cstring): cint {.
   importc: "rename", header: "<stdio.h>".}
 proc c_system(cmd: cstring): cint {.
@@ -652,7 +650,7 @@ proc tryRemoveFile*(file: string): bool {.rtl, extern: "nos$1", tags: [WriteDirE
          deleteFile(f) != 0:
         result = true
   else:
-    if c_remove(file) != 0'i32 and errno != ENOENT:
+    if unlink(file) != 0'i32 and errno != ENOENT:
       result = false
 
 proc removeFile*(file: string) {.rtl, extern: "nos$1", tags: [WriteDirEffect].} =
diff --git a/tests/stdlib/tos.nim b/tests/stdlib/tos.nim
index 2c0db6953..829e35c7b 100644
--- a/tests/stdlib/tos.nim
+++ b/tests/stdlib/tos.nim
@@ -39,6 +39,7 @@ false
 true
 true
 Raises
+Raises
 true
 true
 true
@@ -119,6 +120,14 @@ except IOError:
   echo "Raises"
 removeFile(dname)
 
+# removeFile should not remove directory
+createDir(dname)
+try:
+  removeFile(dname)
+except OSError:
+  echo "Raises"
+removeDir(dname)
+
 # test copyDir:
 createDir("a/b")
 open("a/b/file.txt", fmWrite).close