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.

41 lines
1.3 KiB
JavaScript

'use strict';
const Promise = require("bluebird");
const parseDirectoryRecord = require("../parse/directory-record");
module.exports = function readDirectoryExtent(image, sector, length, encoding) {
return Promise.try(() => {
return image.getSectorSize();
}).then((sectorSize) => {
const roundToNextSector = require("../round-to-next-sector")(sectorSize);
function splitRecordBuffers(buffer) {
let pos = 0;
let recordBuffers = [];
while (pos < buffer.length) {
let recordLength = buffer.readUInt8(pos);
if (recordLength === 0) {
/* We ran out of records for this sector, skip to the next. */
pos = roundToNextSector(pos);
} else {
let directoryRecord = buffer.slice(pos, pos + recordLength);
recordBuffers.push(directoryRecord);
pos += recordLength;
}
}
return recordBuffers;
}
return Promise.try(() => {
let sectorOffset = sector * sectorSize;
return image.readRange(sectorOffset, sectorOffset + length - 1);
}).then((buffer) => {
let recordBuffers = splitRecordBuffers(buffer);
})
})
};