int sp_mapunlink(spfile *f) { #ifdef _MSC_VER if (f->map) { sp_mapcut(f); if (f->map) sp_unmap(f); } #endif return sp_filerm(f->file); }
int sp_mapclose(spfile *f) { int rc = sp_mapcut(f); if (spunlikely(rc == -1)) return -1; if (f->map) { rc = sp_unmap(f); if (spunlikely(rc == -1)) return -1; } return sp_fileclose(f); }
int sp_mapensure(spfile *f, uint64_t size, float grow) { if (splikely((f->used + size) < f->size)) return 0; int rc = sp_unmap(f); if (spunlikely(rc == -1)) return -1; long double nsz = f->size * grow; if (spunlikely(nsz < size)) nsz = size; rc = sp_mapresize(f, (size_t)nsz); if (spunlikely(rc == -1)) return -1; return sp_map(f, PROT_READ | PROT_WRITE); }
static inline int sp_mapcut(spfile *f) { if (f->creat == 0) return 0; int rc = sp_mapsync(f); if (spunlikely(rc == -1)) return -1; rc = sp_unmap(f); if (spunlikely(rc == -1)) return -1; rc = sp_mapresize(f, f->used); if (spunlikely(rc == -1)) return -1; return 0; }
int sp_mapunmap(spfile *f) { return sp_unmap(f); }