]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/chownr/chownr.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / chownr / chownr.js
diff --git a/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/chownr/chownr.js b/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/chownr/chownr.js
new file mode 100644 (file)
index 0000000..ecd7b45
--- /dev/null
@@ -0,0 +1,52 @@
+module.exports = chownr
+chownr.sync = chownrSync
+
+var fs = require("fs")
+, path = require("path")
+
+function chownr (p, uid, gid, cb) {
+  fs.readdir(p, function (er, children) {
+    // any error other than ENOTDIR means it's not readable, or
+    // doesn't exist.  give up.
+    if (er && er.code !== "ENOTDIR") return cb(er)
+    if (er || !children.length) return fs.chown(p, uid, gid, cb)
+
+    var len = children.length
+    , errState = null
+    children.forEach(function (child) {
+      var pathChild = path.resolve(p, child);
+      fs.lstat(pathChild, function(er, stats) {
+        if (er)
+          return cb(er)
+        if (!stats.isSymbolicLink())
+          chownr(pathChild, uid, gid, then)
+        else
+          then()
+        })
+    })
+    function then (er) {
+      if (errState) return
+      if (er) return cb(errState = er)
+      if (-- len === 0) return fs.chown(p, uid, gid, cb)
+    }
+  })
+}
+
+function chownrSync (p, uid, gid) {
+  var children
+  try {
+    children = fs.readdirSync(p)
+  } catch (er) {
+    if (er && er.code === "ENOTDIR") return fs.chownSync(p, uid, gid)
+    throw er
+  }
+  if (!children.length) return fs.chownSync(p, uid, gid)
+
+  children.forEach(function (child) {
+    var pathChild = path.resolve(p, child)
+    var stats = fs.lstatSync(pathChild)
+    if (!stats.isSymbolicLink())
+      chownrSync(pathChild, uid, gid)
+  })
+  return fs.chownSync(p, uid, gid)
+}