You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iso-spider/lib/iso9660/parse/extended-attribute-record.js

81 lines
2.6 KiB
JavaScript

'use strict';
const createBufferReader = require("../buffer-reader");
const createBitParser = require("../../bit-parser");
const decode = require("../decode");
const parseEscapeSequences = require("./escape-sequences");
let parsePermissions = createBitParser([
"groupOwnerReadable",
null,
"groupOwnerExecutable",
null,
"ownerReadable",
null,
"ownerExecutable",
null,
"groupReadable",
null,
"groupExecutable",
null,
"worldReadable",
null,
"worldExecutable",
null
], {inverse: [0, 2, 4, 6, 8, 10, 12, 14]})
function parseRecordFormat(value) {
switch (value) {
case 0:
return "unspecified";
case 1:
return "fixedLength";
case 2:
return "variableLengthLSB";
case 3:
return "variableLengthMSB";
default:
throw new Error(`Unknown record format encountered: ${value}`);
}
}
function parseRecordAttributes(value) {
switch (value) {
case 0:
return "lineFeedCarriageReturn";
case 1:
return "iso1539";
case 2:
return "containedInRecord";
default:
throw new Error(`Unknown record attributes encountered: ${value}`);
}
}
module.exports = function parseExtendedAttributeRecord(data, {encoding} = {encoding: "ascii"}) {
let bufferReader = createBufferReader(data, {encoding: encoding});
let applicationUseLength = bufferReader.int16_LSB_MSB(246);
let escapeSequenceLength = bufferReader.int8(181);
return {
ownerIdentification: bufferReader.int16_LSB_MSB(0),
groupIdentification: bufferReader.int16_LSB_MSB(4),
permissions: parsePermissions(bufferReader.int16_MSB(8)),
creationDate: bufferReader.decDatetime(10),
modificationDate: bufferReader.decDatetime(27),
expirationDate: bufferReader.decDatetime(44),
effectiveDate: bufferReader.decDatetime(61),
recordFormat: parseRecordFormat(bufferReader.int8(78)),
recordAttributes: parseRecordAttributes(bufferReader.int8(79)),
recordLength: bufferReader.int16_LSB_MSB(80),
systemIdentifier: bufferReader.strA1(84, 32),
systemUse: bufferReader.slice(116, 64),
earVersion: bufferReader.int8(180),
escapeSequenceLength: escapeSequenceLength,
applicationUseLength: applicationUseLength,
applicationUse: bufferReader.slice(250, applicationUseLength),
escapeSequences: parseEscapeSequences(bufferReader.slice(250 + applicationUseLength, escapeSequenceLength))
}
};