Security update for permissions_by_term
[yaffs-website] / node_modules / fs-extra / lib / mkdirs / mkdirs-sync.js
1 var fs = require('graceful-fs')
2 var path = require('path')
3 var invalidWin32Path = require('./win32').invalidWin32Path
4
5 var o777 = parseInt('0777', 8)
6
7 function mkdirsSync (p, opts, made) {
8   if (!opts || typeof opts !== 'object') {
9     opts = { mode: opts }
10   }
11
12   var mode = opts.mode
13   var xfs = opts.fs || fs
14
15   if (process.platform === 'win32' && invalidWin32Path(p)) {
16     var errInval = new Error(p + ' contains invalid WIN32 path characters.')
17     errInval.code = 'EINVAL'
18     throw errInval
19   }
20
21   if (mode === undefined) {
22     mode = o777 & (~process.umask())
23   }
24   if (!made) made = null
25
26   p = path.resolve(p)
27
28   try {
29     xfs.mkdirSync(p, mode)
30     made = made || p
31   } catch (err0) {
32     switch (err0.code) {
33       case 'ENOENT':
34         if (path.dirname(p) === p) throw err0
35         made = mkdirsSync(path.dirname(p), opts, made)
36         mkdirsSync(p, opts, made)
37         break
38
39       // In the case of any other error, just see if there's a dir
40       // there already.  If so, then hooray!  If not, then something
41       // is borked.
42       default:
43         var stat
44         try {
45           stat = xfs.statSync(p)
46         } catch (err1) {
47           throw err0
48         }
49         if (!stat.isDirectory()) throw err0
50         break
51     }
52   }
53
54   return made
55 }
56
57 module.exports = mkdirsSync