Skip to content

Commit

Permalink
Added ability to pass offset to buffer write and toString methods as …
Browse files Browse the repository at this point in the history
…a string, i.e. '2' and encoding as anything
  • Loading branch information
DmitryBaranovskiy authored and ry committed Jul 26, 2010
1 parent a585c5b commit 8ab3c3e
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 28 deletions.
45 changes: 17 additions & 28 deletions lib/buffer.js
Expand Up @@ -12,22 +12,21 @@ Buffer.isBuffer = function (b) {
};

Buffer.prototype.inspect = function () {
var s = "<Buffer ";
for (var i = 0; i < this.length; i++) {
s += toHex(this[i]);
if (i != this.length - 1) s += ' ';
var out = [],
len = this.length;
for (var i = 0; i < len; i++) {
out[i] = toHex(this[i]);
}
s += ">";
return s;
return "<Buffer " + out.join(" ") + ">";
};

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 '';
}

Expand All @@ -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':
Expand All @@ -83,10 +78,4 @@ Buffer.prototype.write = function (string) {
default:
throw new Error('Unknown encoding');
}
};






};
12 changes: 12 additions & 0 deletions test/simple/test-buffer.js
Expand Up @@ -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++) {
Expand Down

0 comments on commit 8ab3c3e

Please sign in to comment.