diff --git a/lib/fs.js b/lib/fs.js index c1283dd4c8..ecbe0139e0 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -643,7 +643,7 @@ var ReadStream = fs.ReadStream = function(path, options) { } else if (this.start > this.end) { this.emit('error', new Error('start must be <= end')); } else { - this.firstRead = true; + this._firstRead = true; } } @@ -684,8 +684,9 @@ ReadStream.prototype._read = function () { allocNewPool(); } - if (self.start !== undefined && self.firstRead) { + if (self.start !== undefined && self._firstRead) { self.pos = self.start; + self._firstRead = false; } // Grab another reference to the pool in the case that while we're in the @@ -731,10 +732,7 @@ ReadStream.prototype._read = function () { self._read(); } - // pass null for position after we've seeked to the start of a range read - // always pass null on a non-range read - fs.read(self.fd, pool, pool.used, toRead, (self.firstRead ? self.pos : null), afterRead); - self.firstRead = false; + fs.read(self.fd, pool, pool.used, toRead, self.pos, afterRead); if (self.pos !== undefined) { self.pos += toRead; diff --git a/test/simple/test-fs-read-stream.js b/test/simple/test-fs-read-stream.js index cc1b6cd66a..55feddef13 100644 --- a/test/simple/test-fs-read-stream.js +++ b/test/simple/test-fs-read-stream.js @@ -87,13 +87,13 @@ process.addListener('exit', function() { assert.equal(10000, file3.length); }); -var file4 = fs.createReadStream(rangeFile, {start: 1, end: 2}); +var file4 = fs.createReadStream(rangeFile, {bufferSize: 1, start: 1, end: 2}); var contentRead = ''; file4.addListener('data', function(data) { - contentRead += data.toString('utf-8'); + contentRead += data.toString('utf-8'); }); file4.addListener('end', function(data) { - assert.equal(contentRead, 'yz'); + assert.equal(contentRead, 'yz'); }); try { @@ -119,4 +119,4 @@ stream.on('data', function(chunk){ stream.on('end', function(){ assert.equal('x', stream.data); -}); \ No newline at end of file +});