diff --git a/lib/buffer.js b/lib/buffer.js index 78b59051a8..e9fb033f93 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -12,22 +12,21 @@ Buffer.isBuffer = function (b) { }; Buffer.prototype.inspect = function () { - var s = ""; }; Buffer.prototype.toString = function (encoding, start, stop) { - encoding = (encoding || 'utf8').toLowerCase(); - if (!start) start = 0; - if (stop === undefined) stop = this.length; + encoding = String(encoding || 'utf8').toLowerCase(); + start = +start || 0; + if (typeof stop == "undefined") stop = this.length; // Fastpath empty strings - if (stop === start) { + if (+stop == start) { return ''; } @@ -50,21 +49,17 @@ Buffer.prototype.toString = function (encoding, start, stop) { } }; -Buffer.prototype.write = function (string) { +Buffer.prototype.write = function (string, offset, encoding) { // Support both (string, offset, encoding) // and the legacy (string, encoding, offset) - var offset, encoding; - - if (typeof arguments[1] == 'string') { - encoding = arguments[1]; - offset = arguments[2]; - } else { - offset = arguments[1]; - encoding = arguments[2]; + if (!isFinite(offset)) { + var swap = encoding; + encoding = offset; + offset = swap; } - offset = offset || 0; - encoding = encoding || 'utf8'; + offset = +offset || 0; + encoding = String(encoding || 'utf8').toLowerCase(); switch (encoding) { case 'utf8': @@ -83,10 +78,4 @@ Buffer.prototype.write = function (string) { default: throw new Error('Unknown encoding'); } -}; - - - - - - +}; \ No newline at end of file diff --git a/test/simple/test-buffer.js b/test/simple/test-buffer.js index 0a7ed9ffaa..3fb5b2d75d 100644 --- a/test/simple/test-buffer.js +++ b/test/simple/test-buffer.js @@ -137,6 +137,18 @@ assert.equal(new Buffer('abc').toString('ascii', 0, 0), ''); assert.equal(new Buffer('abc').toString('ascii', -100, -100), ''); assert.equal(new Buffer('abc').toString('ascii', 100, 100), ''); +// try toString() with a object as a encoding +assert.equal(new Buffer('abc').toString({toString: function () {return 'ascii';}}), 'abc'); + +// testing for smart defaults and ability to pass string values as offset +var writeTest = new Buffer('abcdes'); +writeTest.write('n', 'ascii'); +writeTest.write('o', 'ascii', '1'); +writeTest.write('d', '2', 'ascii'); +writeTest.write('e', 3, 'ascii'); +writeTest.write('j', 'ascii', 4); +assert.equal(writeTest.toString(), 'nodejs'); + var asciiString = "hello world"; var offset = 100; for (var j = 0; j < 500; j++) {