Revert "fs: ensure readFile[Sync] reads from the beginning"
This reverts commit 4444e731f218edf265a0b160bf1d561df2d5e5b3. PR-URL: https://github.com/nodejs/node/pull/10809 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
4444e731f2
commit
66f09be743
10
lib/fs.js
10
lib/fs.js
@ -310,7 +310,7 @@ ReadFileContext.prototype.read = function() {
|
|||||||
req.oncomplete = readFileAfterRead;
|
req.oncomplete = readFileAfterRead;
|
||||||
req.context = this;
|
req.context = this;
|
||||||
|
|
||||||
binding.read(this.fd, buffer, offset, length, this.pos, req);
|
binding.read(this.fd, buffer, offset, length, -1, req);
|
||||||
};
|
};
|
||||||
|
|
||||||
ReadFileContext.prototype.close = function(err) {
|
ReadFileContext.prototype.close = function(err) {
|
||||||
@ -447,11 +447,11 @@ function tryCreateBuffer(size, fd, isUserFd) {
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
function tryReadSync(fd, isUserFd, buffer, pos, len, offset) {
|
function tryReadSync(fd, isUserFd, buffer, pos, len) {
|
||||||
var threw = true;
|
var threw = true;
|
||||||
var bytesRead;
|
var bytesRead;
|
||||||
try {
|
try {
|
||||||
bytesRead = fs.readSync(fd, buffer, pos, len, offset);
|
bytesRead = fs.readSync(fd, buffer, pos, len);
|
||||||
threw = false;
|
threw = false;
|
||||||
} finally {
|
} finally {
|
||||||
if (threw && !isUserFd) fs.closeSync(fd);
|
if (threw && !isUserFd) fs.closeSync(fd);
|
||||||
@ -480,7 +480,7 @@ fs.readFileSync = function(path, options) {
|
|||||||
|
|
||||||
if (size !== 0) {
|
if (size !== 0) {
|
||||||
do {
|
do {
|
||||||
bytesRead = tryReadSync(fd, isUserFd, buffer, pos, size - pos, pos);
|
bytesRead = tryReadSync(fd, isUserFd, buffer, pos, size - pos);
|
||||||
pos += bytesRead;
|
pos += bytesRead;
|
||||||
} while (bytesRead !== 0 && pos < size);
|
} while (bytesRead !== 0 && pos < size);
|
||||||
} else {
|
} else {
|
||||||
@ -488,7 +488,7 @@ fs.readFileSync = function(path, options) {
|
|||||||
// the kernel lies about many files.
|
// the kernel lies about many files.
|
||||||
// Go ahead and try to read some bytes.
|
// Go ahead and try to read some bytes.
|
||||||
buffer = Buffer.allocUnsafe(8192);
|
buffer = Buffer.allocUnsafe(8192);
|
||||||
bytesRead = tryReadSync(fd, isUserFd, buffer, 0, 8192, pos);
|
bytesRead = tryReadSync(fd, isUserFd, buffer, 0, 8192);
|
||||||
if (bytesRead !== 0) {
|
if (bytesRead !== 0) {
|
||||||
buffers.push(buffer.slice(0, bytesRead));
|
buffers.push(buffer.slice(0, bytesRead));
|
||||||
}
|
}
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
const common = require('../common');
|
|
||||||
const assert = require('assert');
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
const filename = path.join(common.tmpDir, 'readfile.txt');
|
|
||||||
const dataExpected = 'a'.repeat(100);
|
|
||||||
fs.writeFileSync(filename, dataExpected);
|
|
||||||
const fileLength = dataExpected.length;
|
|
||||||
|
|
||||||
['r', 'a+'].forEach((mode) => {
|
|
||||||
const fd = fs.openSync(filename, mode);
|
|
||||||
assert.strictEqual(fs.readFileSync(fd).length, fileLength);
|
|
||||||
|
|
||||||
// Reading again should result in the same length.
|
|
||||||
assert.strictEqual(fs.readFileSync(fd).length, fileLength);
|
|
||||||
|
|
||||||
fs.readFile(fd, common.mustCall((err, buf) => {
|
|
||||||
assert.ifError(err);
|
|
||||||
assert.strictEqual(buf.length, fileLength);
|
|
||||||
}));
|
|
||||||
});
|
|
Loading…
x
Reference in New Issue
Block a user