diff options
-rw-r--r-- | Cytore.hpp | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -178,7 +178,7 @@ class File { return blocks_.size() * Block_; } - void Open(const char *path) { + void Open(const char *path) { open: _assert(file_ == -1); file_ = open(path, O_RDWR | O_CREAT | O_EXLOCK, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); _assert(file_ != -1); @@ -197,8 +197,12 @@ class File { Header_().magic_ = Magic; Size_() = core; + } else if (size < core) { + close(file_); + file_ = -1; + unlink(path); + goto open; } else { - _assert(size >= core); // XXX: this involves an unneccessary call to ftruncate() _assert(Truncate_(size)); _assert(Header_().magic_ == Magic); |