[d565449] | 1 | module.exports = realpath
|
---|
| 2 | realpath.realpath = realpath
|
---|
| 3 | realpath.sync = realpathSync
|
---|
| 4 | realpath.realpathSync = realpathSync
|
---|
| 5 | realpath.monkeypatch = monkeypatch
|
---|
| 6 | realpath.unmonkeypatch = unmonkeypatch
|
---|
| 7 |
|
---|
| 8 | var fs = require('fs')
|
---|
| 9 | var origRealpath = fs.realpath
|
---|
| 10 | var origRealpathSync = fs.realpathSync
|
---|
| 11 |
|
---|
| 12 | var version = process.version
|
---|
| 13 | var ok = /^v[0-5]\./.test(version)
|
---|
| 14 | var old = require('./old.js')
|
---|
| 15 |
|
---|
| 16 | function newError (er) {
|
---|
| 17 | return er && er.syscall === 'realpath' && (
|
---|
| 18 | er.code === 'ELOOP' ||
|
---|
| 19 | er.code === 'ENOMEM' ||
|
---|
| 20 | er.code === 'ENAMETOOLONG'
|
---|
| 21 | )
|
---|
| 22 | }
|
---|
| 23 |
|
---|
| 24 | function realpath (p, cache, cb) {
|
---|
| 25 | if (ok) {
|
---|
| 26 | return origRealpath(p, cache, cb)
|
---|
| 27 | }
|
---|
| 28 |
|
---|
| 29 | if (typeof cache === 'function') {
|
---|
| 30 | cb = cache
|
---|
| 31 | cache = null
|
---|
| 32 | }
|
---|
| 33 | origRealpath(p, cache, function (er, result) {
|
---|
| 34 | if (newError(er)) {
|
---|
| 35 | old.realpath(p, cache, cb)
|
---|
| 36 | } else {
|
---|
| 37 | cb(er, result)
|
---|
| 38 | }
|
---|
| 39 | })
|
---|
| 40 | }
|
---|
| 41 |
|
---|
| 42 | function realpathSync (p, cache) {
|
---|
| 43 | if (ok) {
|
---|
| 44 | return origRealpathSync(p, cache)
|
---|
| 45 | }
|
---|
| 46 |
|
---|
| 47 | try {
|
---|
| 48 | return origRealpathSync(p, cache)
|
---|
| 49 | } catch (er) {
|
---|
| 50 | if (newError(er)) {
|
---|
| 51 | return old.realpathSync(p, cache)
|
---|
| 52 | } else {
|
---|
| 53 | throw er
|
---|
| 54 | }
|
---|
| 55 | }
|
---|
| 56 | }
|
---|
| 57 |
|
---|
| 58 | function monkeypatch () {
|
---|
| 59 | fs.realpath = realpath
|
---|
| 60 | fs.realpathSync = realpathSync
|
---|
| 61 | }
|
---|
| 62 |
|
---|
| 63 | function unmonkeypatch () {
|
---|
| 64 | fs.realpath = origRealpath
|
---|
| 65 | fs.realpathSync = origRealpathSync
|
---|
| 66 | }
|
---|