]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- restructuring
authorArvin Schnell <aschnell@suse.de>
Mon, 23 May 2011 12:30:24 +0000 (14:30 +0200)
committerArvin Schnell <aschnell@suse.de>
Mon, 23 May 2011 12:30:24 +0000 (14:30 +0200)
snapper/File.cc
snapper/File.h

index ed84b060f7f8360795dc1830890cb29749578235..6b6c03894401bad45445ff19991582d0867ac5ec 100644 (file)
@@ -468,6 +468,39 @@ namespace snapper
     }
 
 
+    bool
+    File::deleteAllTypes() const
+    {
+       struct stat fs;
+       if (lstat(getAbsolutePath(LOC_POST).c_str(), &fs) == 0)
+       {
+           switch (fs.st_mode & S_IFMT)
+           {
+               case S_IFDIR: {
+                   if (rmdir(getAbsolutePath(LOC_SYSTEM).c_str()) != 0)
+                   {
+                       y2err("rmdir failed path:" << getAbsolutePath(LOC_SYSTEM) <<
+                             " errno:" << errno);
+                       return false;
+                   }
+               } break;
+
+               case S_IFREG:
+               case S_IFLNK: {
+                   if (unlink(getAbsolutePath(LOC_SYSTEM).c_str()) != 0)
+                   {
+                       y2err("unlink failed path:" << getAbsolutePath(LOC_SYSTEM) <<
+                             " errno:" << errno);
+                       return false;
+                   }
+               } break;
+           }
+       }
+
+       return true;
+    }
+
+
     bool
     File::doRollback()
     {
@@ -485,44 +518,8 @@ namespace snapper
 
        if (getPreToPostStatus() & CREATED || getPreToPostStatus() & TYPE)
        {
-           struct stat fs;
-           if (lstat(getAbsolutePath(LOC_POST).c_str(), &fs) != 0)
-           {
-               y2err("lstat failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" << errno);
+           if (!deleteAllTypes())
                error = true;
-           }
-           else
-           {
-               switch (fs.st_mode & S_IFMT)
-               {
-                   case S_IFDIR: {
-                       if (rmdir(getAbsolutePath(LOC_SYSTEM).c_str()) != 0)
-                       {
-                           y2err("rmdir failed path:" << getAbsolutePath(LOC_SYSTEM) <<
-                                 " errno:" << errno);
-                           error = true;
-                       }
-                   } break;
-
-                   case S_IFREG: {
-                       if (unlink(getAbsolutePath(LOC_SYSTEM).c_str()) != 0)
-                       {
-                           y2err("unlink failed path:" << getAbsolutePath(LOC_SYSTEM) <<
-                                 " errno:" << errno);
-                           error = true;
-                       }
-                   } break;
-
-                   case S_IFLNK: {
-                       if (unlink(getAbsolutePath(LOC_SYSTEM).c_str()) != 0)
-                       {
-                           y2err("unlink failed path:" << getAbsolutePath(LOC_SYSTEM) <<
-                                 " errno:" << errno);
-                           error = true;
-                       }
-                   } break;
-               }
-           }
        }
 
        if (getPreToPostStatus() & DELETED || getPreToPostStatus() & TYPE)
@@ -578,14 +575,16 @@ namespace snapper
                    switch (fs.st_mode & S_IFMT)
                    {
                        case S_IFREG: {
-                           unlink(getAbsolutePath(LOC_SYSTEM).c_str());
-                           if (!createFile(fs.st_mode, fs.st_uid, fs.st_gid))
+                           if (!deleteAllTypes())
+                               error = true;
+                           else if (!createFile(fs.st_mode, fs.st_uid, fs.st_gid))
                                error = true;
                        } break;
 
                        case S_IFLNK: {
-                           unlink(getAbsolutePath(LOC_SYSTEM).c_str());
-                           if (!createLink(fs.st_uid, fs.st_gid))
+                           if (!deleteAllTypes())
+                               error = true;
+                           else if (!createLink(fs.st_uid, fs.st_gid))
                                error = true;
                        } break;
                    }
index 0846f5dd5e2b44f7c6b292bd20a85181254206d4..0e3053ec4b9cc70a5775fca66bd0bee765e055c0 100644 (file)
@@ -112,6 +112,8 @@ namespace snapper
        bool createFile(mode_t mode, uid_t owner, gid_t group) const;
        bool createLink(uid_t owner, gid_t group) const;
 
+       bool deleteAllTypes() const;
+
        const Comparison* comparison;
 
        string name;