]> git.saurik.com Git - cydia.git/commitdiff
If Cytore failed to save the first block, restart. v1.1.28%b7
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 29 Jan 2017 23:10:13 +0000 (15:10 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 29 Jan 2017 23:10:13 +0000 (15:10 -0800)
Cytore.hpp

index a382dd87cfab1d0d812040c3683823fe6f3f06b2..c0bad09b89178a24151a09621b2a172d9e666dc8 100644 (file)
@@ -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);