nufatfs
Version:
A new async-friendly library for accessing FAT16 and FAT32 filesystems
40 lines (39 loc) • 1.78 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createImageFileDriver = void 0;
const fs_1 = __importDefault(require("fs"));
function createImageFileDriver(imageFile, sectorSize, writable = false) {
const stat = fs_1.default.statSync(imageFile);
const handle = fs_1.default.openSync(imageFile, writable ? 'r+' : 'r');
return {
sectorSize,
numSectors: Math.floor(stat.size / sectorSize),
readSectors: async (startIndex, count) => {
return new Promise((res, rej) => {
const buffer = new Uint8Array(count * sectorSize);
fs_1.default.read(handle, buffer, 0, buffer.length, startIndex * sectorSize, (err, read, buffer) => {
if (err)
rej(err);
else if (buffer.length != read)
throw new Error(`Failed to read required number of bytes - expected ${buffer.length}, got ${read}`);
else
res(buffer);
});
});
},
writeSectors: writable ? async (startIndex, data) => {
if (startIndex * sectorSize + data.length > stat.size)
return Promise.reject(new Error("Writing out of bounds of image!"));
return new Promise((res, rej) => fs_1.default.write(handle, data, 0, data.length, startIndex * sectorSize, (err, written) => {
if (err)
rej(err);
else
res();
}));
} : null,
};
}
exports.createImageFileDriver = createImageFileDriver;