aboutsummaryrefslogtreecommitdiff
path: root/node_modules/tar-stream/headers.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/tar-stream/headers.js')
-rw-r--r--node_modules/tar-stream/headers.js31
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