1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
// field names that every tar file must have.
// header is padded to 512 bytes.
var f = 0
, fields = {}
, NAME = fields.NAME = f++
, MODE = fields.MODE = f++
, UID = fields.UID = f++
, GID = fields.GID = f++
, SIZE = fields.SIZE = f++
, MTIME = fields.MTIME = f++
, CKSUM = fields.CKSUM = f++
, TYPE = fields.TYPE = f++
, LINKNAME = fields.LINKNAME = f++
, headerSize = 512
, fieldSize = []
fieldSize[NAME] = 100
fieldSize[MODE] = 8
fieldSize[UID] = 8
fieldSize[GID] = 8
fieldSize[SIZE] = 12
fieldSize[MTIME] = 12
fieldSize[CKSUM] = 8
fieldSize[TYPE] = 1
fieldSize[LINKNAME] = 100
// "ustar\0" may introduce another bunch of headers.
// these are optional, and will be nulled out if not present.
var ustar = new Buffer(6)
ustar.asciiWrite("ustar\0")
var USTAR = fields.USTAR = f++
, USTARVER = fields.USTARVER = f++
, UNAME = fields.UNAME = f++
, GNAME = fields.GNAME = f++
, DEVMAJ = fields.DEVMAJ = f++
, DEVMIN = fields.DEVMIN = f++
, PREFIX = fields.PREFIX = f++
// terminate fields.
fields[f] = null
fieldSize[USTAR] = 6
fieldSize[USTARVER] = 2
fieldSize[UNAME] = 32
fieldSize[GNAME] = 32
fieldSize[DEVMAJ] = 8
fieldSize[DEVMIN] = 8
fieldSize[PREFIX] = 155
var fieldEnds = {}
, fieldOffs = {}
, fe = 0
for (var i = 0; i < f; i ++) {
fieldOffs[i] = fe
fieldEnds[i] = (fe += fieldSize[i])
}
// build a translation table of field names.
Object.keys(fields).forEach(function (f) {
fields[fields[f]] = f
})
exports.ustar = ustar
exports.fields = fields
exports.fieldSize = fieldSize
exports.fieldOffs = fieldOffs
exports.fieldEnds = fieldEnds
exports.headerSize = headerSize
var Parser = exports.Parser = require("./parser")
exports.createParser = Parser.create
var Generator = exports.Generator = require("./generator")
exports.createGenerator = Generator.create
|