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.

35 lines
1.1 KiB
JavaScript

'use strict';
const Promise = require("bluebird");
const promiseWhile = require("promise-while-loop");
const parseVolumeDescriptor = require("../parse/volume-descriptor");
module.exports = function readVolumeDescriptors(image) {
return Promise.try(() => {
let encounteredTerminator = false;
let currentSector = 16;
return promiseWhile(() => encounteredTerminator === false, (lastResult) => {
return Promise.try(() => {
let offset = currentSector * 2048; // Always assume a sector size of 2048 for volume descriptors
return image.readRange(offset, offset + 2047);
}).then((buffer) => {
let descriptor = parseVolumeDescriptor(buffer);
if (descriptor.type === "terminator") {
encounteredTerminator = true;
}
currentSector += 1;
return descriptor;
});
});
}).map((volumeDescriptor, i) => {
return Object.assign({
volumeDescriptorIndex: i
}, volumeDescriptor);
});
};