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.
81 lines
2.6 KiB
JavaScript
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))
|
|
}
|
|
};
|