| var Buffer = require('buffer').Buffer |
| |
| module.exports = function (buf) { |
| // If the buffer is backed by a Uint8Array, a faster version will work |
| if (buf instanceof Uint8Array) { |
| // If the buffer isn't a subarray, return the underlying ArrayBuffer |
| if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { |
| return buf.buffer |
| } else if (typeof buf.buffer.slice === 'function') { |
| // Otherwise we need to get a proper copy |
| return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) |
| } |
| } |
| |
| if (Buffer.isBuffer(buf)) { |
| // This is the slow version that will work with any Buffer |
| // implementation (even in old browsers) |
| var arrayCopy = new Uint8Array(buf.length) |
| var len = buf.length |
| for (var i = 0; i < len; i++) { |
| arrayCopy[i] = buf[i] |
| } |
| return arrayCopy.buffer |
| } else { |
| throw new Error('Argument must be a Buffer') |
| } |
| } |