| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | // Basically just a wrapper around an fs.readlink//// XXX: Enhance this to support the Link type, by keeping// a lookup table of {<dev+inode>:<path>}, so that hardlinks// can be preserved in tarballs.module.exports = LinkReadervar fs = require('graceful-fs')var inherits = require('inherits')var Reader = require('./reader.js')inherits(LinkReader, Reader)function LinkReader (props) {  var self = this  if (!(self instanceof LinkReader)) {    throw new Error('LinkReader must be called as constructor.')  }  if (!((props.type === 'Link' && props.Link) ||    (props.type === 'SymbolicLink' && props.SymbolicLink))) {    throw new Error('Non-link type ' + props.type)  }  Reader.call(self, props)}// When piping a LinkReader into a LinkWriter, we have to// already have the linkpath property set, so that has to// happen *before* the "ready" event, which means we need to// override the _stat method.LinkReader.prototype._stat = function (currentStat) {  var self = this  fs.readlink(self._path, function (er, linkpath) {    if (er) return self.error(er)    self.linkpath = self.props.linkpath = linkpath    self.emit('linkpath', linkpath)    Reader.prototype._stat.call(self, currentStat)  })}LinkReader.prototype._read = function () {  var self = this  if (self._paused) return  // basically just a no-op, since we got all the info we need  // from the _stat method  if (!self._ended) {    self.emit('end')    self.emit('close')    self._ended = true  }}
 |