diff options
Diffstat (limited to 'node_modules/tar-stream/headers.js')
-rw-r--r-- | node_modules/tar-stream/headers.js | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/node_modules/tar-stream/headers.js b/node_modules/tar-stream/headers.js index 8aab8b561..6efbc4a3a 100644 --- a/node_modules/tar-stream/headers.js +++ b/node_modules/tar-stream/headers.js @@ -1,3 +1,6 @@ +var toBuffer = require('to-buffer') +var alloc = require('buffer-alloc') + var ZEROS = '0000000000000000000' var SEVENS = '7777777777777777777' var ZERO_OFFSET = '0'.charCodeAt(0) @@ -6,7 +9,7 @@ var MASK = parseInt('7777', 8) var clamp = function (index, len, defaultValue) { if (typeof index !== 'number') return defaultValue - index = ~~index // Coerce to integer. + index = ~~index // Coerce to integer. if (index >= len) return len if (index >= 0) return index index += len @@ -71,12 +74,6 @@ var toTypeflag = function (flag) { return 0 } -var alloc = function (size) { - var buf = new Buffer(size) - buf.fill(0) - return buf -} - var indexOf = function (block, num, offset, end) { for (; offset < end; offset++) { if (block[offset] === num) return offset @@ -149,20 +146,20 @@ var decodeOct = function (val, offset, length) { } } -var decodeStr = function (val, offset, length) { - return val.slice(offset, indexOf(val, 0, offset, offset + length)).toString() +var decodeStr = function (val, offset, length, encoding) { + return val.slice(offset, indexOf(val, 0, offset, offset + length)).toString(encoding) } var addLength = function (str) { var len = Buffer.byteLength(str) var digits = Math.floor(Math.log(len) / Math.log(10)) + 1 - if (len + digits > Math.pow(10, digits)) digits++ + if (len + digits >= Math.pow(10, digits)) digits++ return (len + digits) + str } -exports.decodeLongPath = function (buf) { - return decodeStr(buf, 0, buf.length) +exports.decodeLongPath = function (buf, encoding) { + return decodeStr(buf, 0, buf.length, encoding) } exports.encodePax = function (opts) { // TODO: encode more stuff in pax @@ -175,7 +172,7 @@ exports.encodePax = function (opts) { // TODO: encode more stuff in pax result += addLength(' ' + key + '=' + pax[key] + '\n') } } - return new Buffer(result) + return toBuffer(result) } exports.decodePax = function (buf) { @@ -240,23 +237,23 @@ exports.encode = function (opts) { return buf } -exports.decode = function (buf) { +exports.decode = function (buf, filenameEncoding) { var typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET - var name = decodeStr(buf, 0, 100) + var name = decodeStr(buf, 0, 100, filenameEncoding) var mode = decodeOct(buf, 100, 8) var uid = decodeOct(buf, 108, 8) var gid = decodeOct(buf, 116, 8) var size = decodeOct(buf, 124, 12) var mtime = decodeOct(buf, 136, 12) var type = toType(typeflag) - var linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100) + var linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding) var uname = decodeStr(buf, 265, 32) var gname = decodeStr(buf, 297, 32) var devmajor = decodeOct(buf, 329, 8) var devminor = decodeOct(buf, 337, 8) - if (buf[345]) name = decodeStr(buf, 345, 155) + '/' + name + if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + '/' + name // to support old tar versions that use trailing / to indicate dirs if (typeflag === 0 && name && name[name.length - 1] === '/') typeflag = 5 |