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