-
-static size_t disk_page_read(struct BattFsSuper *d, pgcnt_t page, pgaddr_t addr, void *buf, size_t size)
-{
- //TRACEMSG("page:%d, addr:%d, size:%d", page, addr, size);
- FILE *fp = (FILE *)d->disk_ctx;
- fseek(fp, page * d->page_size + addr, SEEK_SET);
- return fread(buf, 1, size, fp);
-}
-
-static size_t disk_buffer_write(struct BattFsSuper *d, pgaddr_t addr, const void *buf, size_t size)
-{
- //TRACEMSG("addr:%d, size:%d", addr, size);
- ASSERT(addr + size <= d->page_size);
- memcpy(&page_buffer[addr], buf, size);
-
- return size;
-}
-
-static size_t disk_buffer_read(struct BattFsSuper *d, pgaddr_t addr, void *buf, size_t size)
-{
- //TRACEMSG("addr:%d, size:%d", addr, size);
- ASSERT(addr + size <= d->page_size);
- memcpy(buf, &page_buffer[addr], size);
-
- return size;
-}
-
-static bool disk_page_load(struct BattFsSuper *d, pgcnt_t page)
-{
- FILE *fp = (FILE *)d->disk_ctx;
- //TRACEMSG("page:%d", page);
- fseek(fp, page * d->page_size, SEEK_SET);
- return fread(page_buffer, 1, d->page_size, fp) == d->page_size;
-}
-
-static bool disk_page_save(struct BattFsSuper *d, pgcnt_t page)
-{
- FILE *fp = (FILE *)d->disk_ctx;
- //TRACEMSG("page:%d", page);
- fseek(fp, page * d->page_size, SEEK_SET);
- return fwrite(page_buffer, 1, d->page_size, fp) == d->page_size;
-}
-
-static bool disk_page_erase(struct BattFsSuper *d, pgcnt_t page)
-{
- FILE *fp = (FILE *)d->disk_ctx;
- //TRACEMSG("page:%d", page);
- fseek(fp, page * d->page_size, SEEK_SET);
-
- for (int i = 0; i < d->page_size; i++)
- if (fputc(0xff, fp) == EOF)
- return false;
- return true;
-}
-
-static bool disk_close(struct BattFsSuper *d)
-{
- FILE *fp = (FILE *)d->disk_ctx;
- //TRACE;
- free(d->page_array);
- return (fclose(fp) != EOF);
-}
-
-static bool disk_open(struct BattFsSuper *d)
-{
- d->read = disk_page_read;
- d->load = disk_page_load;
- d->bufferWrite = disk_buffer_write;
- d->bufferRead = disk_buffer_read;
- d->save = disk_page_save;
- d->erase = disk_page_erase;
- d->close = disk_close;
-
- FILE *fp = fopen(test_filename, "r+b");
- ASSERT(fp);
- d->disk_ctx = fp;
- fseek(fp, 0, SEEK_END);
- d->page_size = PAGE_SIZE;
- d->page_count = ftell(fp) / d->page_size;
- d->page_array = malloc(d->page_count * sizeof(pgcnt_t));
- //TRACEMSG("page_size:%d, page_count:%d\n", d->page_size, d->page_count);
- return (fp && d->page_array);
-}