module.exports = realpath realpath.realpath = realpath realpath.sync = realpathSync realpath.realpathSync = realpathSync realpath.monkeypatch = monkeypatch realpath.unmonkeypatch = unmonkeypatch

var fs = require('fs') var origRealpath = fs.realpath var origRealpathSync = fs.realpathSync

var version = process.version var ok = /^v./.test(version) var old = require('./old.js')

function newError (er) {

return er && er.syscall === 'realpath' && (
  er.code === 'ELOOP' ||
  er.code === 'ENOMEM' ||
  er.code === 'ENAMETOOLONG'
)

}

function realpath (p, cache, cb) {

if (ok) {
  return origRealpath(p, cache, cb)
}

if (typeof cache === 'function') {
  cb = cache
  cache = null
}
origRealpath(p, cache, function (er, result) {
  if (newError(er)) {
    old.realpath(p, cache, cb)
  } else {
    cb(er, result)
  }
})

}

function realpathSync (p, cache) {

if (ok) {
  return origRealpathSync(p, cache)
}

try {
  return origRealpathSync(p, cache)
} catch (er) {
  if (newError(er)) {
    return old.realpathSync(p, cache)
  } else {
    throw er
  }
}

}

function monkeypatch () {

fs.realpath = realpath
fs.realpathSync = realpathSync

}

function unmonkeypatch () {

fs.realpath = origRealpath
fs.realpathSync = origRealpathSync

}