]> git.saurik.com Git - cydia.git/blobdiff - Cytore.hpp
Let's try to avoid making Guillem Jover sad today.
[cydia.git] / Cytore.hpp
index 714da2663658fc80b24f46605a6e71f2b6b99eb1..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);
@@ -190,11 +190,19 @@ class File {
 
         size_t size(stat.st_size);
         if (size == 0) {
-            _assert(Truncate_(core));
+            if (!Truncate_(core)) {
+                unlink(path);
+                _assert(false);
+            }
+
             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);