summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDmitry Polienko <nigredo.tori@gmail.com>2016-10-22 17:17:06 +0700
committerDmitry Polienko <nigredo.tori@gmail.com>2016-10-22 17:37:28 +0700
commit45b432b9010d267ef423338ffa70a1298eff7555 (patch)
treef8c9310e648bf36153f06f9805282291acd7dad6
parent1f641b1337bad6fed9fbbea6f0610c54c065c3ea (diff)
downloadNim-45b432b9010d267ef423338ffa70a1298eff7555.tar.gz
Revert createDir signature, expose rawCreateDir
-rw-r--r--lib/pure/os.nim27
-rw-r--r--tests/stdlib/tos.nim7
2 files changed, 15 insertions, 19 deletions
diff --git a/lib/pure/os.nim b/lib/pure/os.nim
index 5f957fea9..88b1bd280 100644
--- a/lib/pure/os.nim
+++ b/lib/pure/os.nim
@@ -1009,10 +1009,15 @@ proc removeDir*(dir: string) {.rtl, extern: "nos$1", tags: [
     of pcDir: removeDir(path)
   rawRemoveDir(dir)
 
-proc rawCreateDir(dir: string): bool =
-  # Create directory.
-  # Does not create parent directories (fails if parent does not exist).
-  # Returns `true` if the directory was created, `false` if it already exists.
+proc tryCreateDir*(dir: string): bool =
+  ## Try to create a `directory`:idx: `dir`.
+  ##
+  ## Does not create parent directories (fails if parent does not exist).
+  ## Returns `true` if a new directory was created, `false` if *path*
+  ## (not necessarily a directory) `dir` already exists.
+
+  # This is a thin wrapper over mkDir (or alternatives on other systems),
+  # so in case of a pre-existing path we don't check that it is a directory.
   when defined(solaris):
     let res = mkdir(dir, 0o777)
     if res == 0'i32:
@@ -1043,16 +1048,14 @@ proc rawCreateDir(dir: string): bool =
     else:
       raiseOSError(osLastError())
 
-proc createDir*(dir: string): bool {.discardable, rtl,
-  extern: "nos$1", tags: [WriteDirEffect].} =
+proc createDir*(dir: string) {.rtl, extern: "nos$1", tags: [WriteDirEffect].} =
   ## Creates the `directory`:idx: `dir`.
   ##
   ## The directory may contain several subdirectories that do not exist yet.
-  ## The full path is created. If this fails, `OSError` is raised.
-  ##
-  ## Returns `true` if the directory did not previously exist
+  ## The full path is created. If this fails, `OSError` is raised. It does **not**
+  ## fail if the path already exists because for most usages this does not
+  ## indicate an error.
   var omitNext = false
-  result = false
   when doslike:
     omitNext = isAbsolute(dir)
   for i in 1.. dir.len-1:
@@ -1060,10 +1063,10 @@ proc createDir*(dir: string): bool {.discardable, rtl,
       if omitNext:
         omitNext = false
       else:
-        result = rawCreateDir(substr(dir, 0, i-1))
+        discard tryCreateDir(substr(dir, 0, i-1))
   # The loop does not create the dir itself if it doesn't end in separator
   if dir[^1] notin {DirSep, AltSep}:
-    result = rawCreateDir(dir)
+    discard tryCreateDir(dir)
 
 proc copyDir*(source, dest: string) {.rtl, extern: "nos$1",
   tags: [WriteIOEffect, ReadIOEffect], benign.} =
diff --git a/tests/stdlib/tos.nim b/tests/stdlib/tos.nim
index 0d726de56..a1ea60feb 100644
--- a/tests/stdlib/tos.nim
+++ b/tests/stdlib/tos.nim
@@ -38,8 +38,6 @@ false
 false
 true
 true
-true
-false
 '''
 """
 # test os path creation, iteration, and deletion
@@ -100,8 +98,3 @@ removeDir(dirs[0])
 createDir(dname / "")
 echo dirExists(dname) # true
 removeDir(dname)
-
-# Check createDir return value
-echo createDir(dname) # true
-echo createDir(dname) # false
-removeDir(dname)