Skip to content

Commit 1a5acd9

Browse files
committed
API: readFileSync without encoding argument now returns a Buffer
Correctly load utf8 data; add a test test-fs-read-file-sync.js
1 parent c82d646 commit 1a5acd9

9 files changed

+42
-25
lines changed

doc/api.markdown

+6-1
Original file line numberDiff line numberDiff line change
@@ -1443,10 +1443,15 @@ contents of the file.
14431443

14441444
If no encoding is specified, then the raw buffer is returned.
14451445

1446-
### fs.readFileSync(filename, encoding='utf8')
1446+
1447+
### fs.readFileSync(filename [, encoding])
14471448

14481449
Synchronous version of `fs.readFile`. Returns the contents of the `filename`.
14491450

1451+
If `encoding` is specified then this function returns a string. Otherwise it
1452+
returns a buffer.
1453+
1454+
14501455
### fs.writeFile(filename, data, encoding='utf8', callback)
14511456

14521457
Asynchronously writes data to a file. Example:

lib/fs.js

+12-11
Original file line numberDiff line numberDiff line change
@@ -88,21 +88,22 @@ fs.readFile = function (path, encoding_, callback) {
8888
};
8989

9090
fs.readFileSync = function (path, encoding) {
91-
encoding = encoding || "utf8"; // default to utf8
92-
93-
var fd = binding.open(path, process.O_RDONLY, 0666);
94-
var content = '';
95-
var pos = null; // leave null to allow reads on unseekable devices
96-
var r;
91+
var fd = fs.openSync(path, process.O_RDONLY, 0666);
92+
var stat = fs.statSync(path);
93+
var buffer = new Buffer(stat.size);
94+
var nread = 0;
9795

98-
while ((r = fs.readSync(fd, 4*1024, pos, encoding)) && r[0]) {
99-
content += r[0];
100-
pos += r[1]
96+
while (nread < buffer.length) {
97+
nread += fs.readSync(fd, buffer, nread, buffer.length - nread, null);
10198
}
10299

103-
binding.close(fd);
100+
fs.closeSync(fd);
104101

105-
return content;
102+
if (encoding) {
103+
return buffer.toString(encoding);
104+
} else {
105+
return buffer;
106+
}
106107
};
107108

108109

lib/module.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ Module.prototype._compile = function (content, filename) {
389389

390390

391391
Module.prototype._loadScriptSync = function (filename) {
392-
var content = requireNative('fs').readFileSync(filename);
392+
var content = requireNative('fs').readFileSync(filename, 'utf8');
393393
var e = this._compile(content, filename);
394394
if (e) {
395395
throw e;

test/simple/test-crypto.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ try {
1212
process.exit();
1313
}
1414

15-
var caPem = fs.readFileSync(fixturesDir+"/test_ca.pem");
16-
var certPem = fs.readFileSync(fixturesDir+"/test_cert.pem");
17-
var keyPem = fs.readFileSync(fixturesDir+"/test_key.pem");
15+
var caPem = fs.readFileSync(fixturesDir+"/test_ca.pem", 'ascii');
16+
var certPem = fs.readFileSync(fixturesDir+"/test_cert.pem", 'ascii');
17+
var keyPem = fs.readFileSync(fixturesDir+"/test_key.pem", 'ascii');
1818

1919
var credentials = crypto.createCredentials({key:keyPem, cert:certPem, ca:caPem});
2020

test/simple/test-fs-read-file-sync.js

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
require('../common');
2+
3+
path = require('path');
4+
fs = require('fs');
5+
fn = path.join(fixturesDir, 'elipses.txt');
6+
7+
var s = fs.readFileSync(fn, 'utf8');
8+
for (var i = 0; i < s.length; i++) {
9+
assert.equal("\u2026", s[i]);
10+
}
11+
assert.equal(10000, s.length);

test/simple/test-fs-symlink.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ try {fs.unlinkSync(dstPath);}catch(e){}
2525
fs.link(srcPath, dstPath, function(err){
2626
if (err) throw err;
2727
puts('hard link done');
28-
var srcContent = fs.readFileSync(srcPath);
29-
var dstContent = fs.readFileSync(dstPath);
28+
var srcContent = fs.readFileSync(srcPath, 'utf8');
29+
var dstContent = fs.readFileSync(dstPath, 'utf8');
3030
assert.equal(srcContent, dstContent);
3131
completed++;
3232
});

test/simple/test-fs-write-buffer.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ fs.open(filename, 'w', 0644, function (err, fd) {
1919
assert.equal(expected.length, written);
2020
fs.closeSync(fd);
2121

22-
var found = fs.readFileSync(filename);
22+
var found = fs.readFileSync(filename, 'utf8');
2323
assert.deepEqual(expected.toString(), found);
2424
fs.unlinkSync(filename);
2525
});

test/simple/test-http-tls.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ var request_number = 0;
2222
var requests_sent = 0;
2323
var server_response = "";
2424
var client_got_eof = false;
25-
var caPem = fs.readFileSync(fixturesDir+"/test_ca.pem");
26-
var certPem = fs.readFileSync(fixturesDir+"/test_cert.pem");
27-
var keyPem = fs.readFileSync(fixturesDir+"/test_key.pem");
25+
var caPem = fs.readFileSync(fixturesDir+"/test_ca.pem", 'ascii');
26+
var certPem = fs.readFileSync(fixturesDir+"/test_cert.pem", 'ascii');
27+
var keyPem = fs.readFileSync(fixturesDir+"/test_key.pem", 'ascii');
2828

2929
var credentials = crypto.createCredentials({key:keyPem, cert:certPem, ca:caPem});
3030

test/simple/test-tcp-tls.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ try {
1313
process.exit();
1414
}
1515

16-
var caPem = fs.readFileSync(fixturesDir+"/test_ca.pem");
17-
var certPem = fs.readFileSync(fixturesDir+"/test_cert.pem");
18-
var keyPem = fs.readFileSync(fixturesDir+"/test_key.pem");
16+
var caPem = fs.readFileSync(fixturesDir+"/test_ca.pem", 'ascii');
17+
var certPem = fs.readFileSync(fixturesDir+"/test_cert.pem", 'ascii');
18+
var keyPem = fs.readFileSync(fixturesDir+"/test_key.pem", 'ascii');
1919

2020
var credentials = crypto.createCredentials({key:keyPem, cert:certPem, ca:caPem});
2121

0 commit comments

Comments
 (0)