UNPKG

nufatfs

Version:

A new async-friendly library for accessing FAT16 and FAT32 filesystems

40 lines (39 loc) 1.78 kB
"use strict"; 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;