return b;
}
+function fromArrayLike(obj) {
+ const length = obj.length;
+ const b = allocate(length);
+ for (let i = 0; i < length; i++)
+ b[i] = obj[i] & 255;
+ return b;
+}
function fromObject(obj) {
if (obj instanceof Buffer) {
return b;
}
- if (Array.isArray(obj)) {
- const length = obj.length;
- const b = allocate(length);
- for (let i = 0; i < length; i++)
- b[i] = obj[i] & 255;
- return b;
- }
-
if (obj == null) {
throw new TypeError('must start with number, buffer, array or string');
}
return binding.createFromArrayBuffer(obj);
}
- if (obj.buffer instanceof ArrayBuffer || obj.length) {
- let length;
- if (typeof obj.length !== 'number' || obj.length !== obj.length)
- length = 0;
- else
- length = obj.length;
- const b = allocate(length);
- for (let i = 0; i < length; i++) {
- b[i] = obj[i] & 255;
+ if (obj.buffer instanceof ArrayBuffer || 'length' in obj) {
+ if (typeof obj.length !== 'number' || obj.length !== obj.length) {
+ return allocate(0);
}
- return b;
+ return fromArrayLike(obj);
}
if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
- var array = obj.data;
- const b = allocate(array.length);
- for (let i = 0; i < array.length; i++)
- b[i] = array[i] & 255;
- return b;
+ return fromArrayLike(obj.data);
}
throw new TypeError('must start with number, buffer, array or string');
console.log('c.length == %d', c.length);
assert.strictEqual(512, c.length);
+var d = new Buffer([]);
+assert.strictEqual(0, d.length);
+
+var ui32 = new Uint32Array(4).fill(42);
+var e = Buffer(ui32);
+assert.deepEqual(ui32, e);
+
// First check Buffer#fill() works as expected.
assert.throws(function() {