80 lines
3.1 KiB
JavaScript
80 lines
3.1 KiB
JavaScript
var Utils = require("../util"),
|
|
Constants = Utils.Constants;
|
|
|
|
/* The entries in the end of central directory */
|
|
module.exports = function () {
|
|
var _volumeEntries = 0,
|
|
_totalEntries = 0,
|
|
_size = 0,
|
|
_offset = 0,
|
|
_commentLength = 0;
|
|
|
|
return {
|
|
get diskEntries () { return _volumeEntries },
|
|
set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; },
|
|
|
|
get totalEntries () { return _totalEntries },
|
|
set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; },
|
|
|
|
get size () { return _size },
|
|
set size (/*Number*/val) { _size = val; },
|
|
|
|
get offset () { return _offset },
|
|
set offset (/*Number*/val) { _offset = val; },
|
|
|
|
get commentLength () { return _commentLength },
|
|
set commentLength (/*Number*/val) { _commentLength = val; },
|
|
|
|
get mainHeaderSize () {
|
|
return Constants.ENDHDR + _commentLength;
|
|
},
|
|
|
|
loadFromBinary : function(/*Buffer*/data) {
|
|
// data should be 22 bytes and start with "PK 05 06"
|
|
if (data.length != Constants.ENDHDR || data.readUInt32LE(0) != Constants.ENDSIG)
|
|
throw Utils.Errors.INVALID_END;
|
|
|
|
// number of entries on this volume
|
|
_volumeEntries = data.readUInt16LE(Constants.ENDSUB);
|
|
// total number of entries
|
|
_totalEntries = data.readUInt16LE(Constants.ENDTOT);
|
|
// central directory size in bytes
|
|
_size = data.readUInt32LE(Constants.ENDSIZ);
|
|
// offset of first CEN header
|
|
_offset = data.readUInt32LE(Constants.ENDOFF);
|
|
// zip file comment length
|
|
_commentLength = data.readUInt16LE(Constants.ENDCOM);
|
|
},
|
|
|
|
toBinary : function() {
|
|
var b = new Buffer(Constants.ENDHDR + _commentLength);
|
|
// "PK 05 06" signature
|
|
b.writeUInt32LE(Constants.ENDSIG, 0);
|
|
b.writeUInt32LE(0, 4);
|
|
// number of entries on this volume
|
|
b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);
|
|
// total number of entries
|
|
b.writeUInt16LE(_totalEntries, Constants.ENDTOT);
|
|
// central directory size in bytes
|
|
b.writeUInt32LE(_size, Constants.ENDSIZ);
|
|
// offset of first CEN header
|
|
b.writeUInt32LE(_offset, Constants.ENDOFF);
|
|
// zip file comment length
|
|
b.writeUInt16LE(_commentLength, Constants.ENDCOM);
|
|
// fill comment memory with spaces so no garbage is left there
|
|
b.fill(" ", Constants.ENDHDR);
|
|
|
|
return b;
|
|
},
|
|
|
|
toString : function() {
|
|
return '{\n' +
|
|
'\t"diskEntries" : ' + _volumeEntries + ",\n" +
|
|
'\t"totalEntries" : ' + _totalEntries + ",\n" +
|
|
'\t"size" : ' + _size + " bytes,\n" +
|
|
'\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" +
|
|
'\t"commentLength" : 0x' + _commentLength + "\n" +
|
|
'}';
|
|
}
|
|
}
|
|
}; |