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