'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)) } };