Browse Source

Added ability to pass offset to buffer write and toString methods as a string, i.e. '2' and encoding as anything

v0.7.4-release
Dmitry Baranovskiy 15 years ago
committed by Ryan Dahl
parent
commit
8ab3c3e7c3
  1. 45
      lib/buffer.js
  2. 12
      test/simple/test-buffer.js

45
lib/buffer.js

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

12
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++) {

Loading…
Cancel
Save