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