Replace boost::scoped_ptr with std::unique_ptr.
[cumulus.git] / main.cc
diff --git a/main.cc b/main.cc
index 9734521..1335bea 100644 (file)
--- a/main.cc
+++ b/main.cc
 #include <iostream>
 #include <list>
 #include <map>
+#include <memory>
 #include <set>
 #include <sstream>
 #include <string>
 #include <vector>
 
-#include "cumulus.h"
 #include "exclude.h"
 #include "hash.h"
 #include "localdb.h"
@@ -62,6 +62,7 @@ using std::map;
 using std::string;
 using std::vector;
 using std::ostream;
+using std::unique_ptr;
 
 /* Version information.  This will be filled in by the Makefile. */
 #ifndef CUMULUS_VERSION
@@ -227,7 +228,7 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path,
     /* If the file is new or changed, we must read in the contents a block at a
      * time. */
     if (!cached) {
-        scoped_ptr<Hash> file_hash(Hash::New());
+        unique_ptr<Hash> file_hash(Hash::New());
         Subfile subfile(db);
         subfile.load_old_blocks(old_blocks);
 
@@ -258,7 +259,7 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path,
             double block_age = 0.0;
             ObjectReference ref;
 
-            scoped_ptr<Hash> block_hash(Hash::New());
+            unique_ptr<Hash> block_hash(Hash::New());
             block_hash->update(block_buf, bytes);
             string block_csum = block_hash->digest_str();
 
@@ -314,6 +315,12 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path,
 
             while (!refs.empty()) {
                 ref = refs.front(); refs.pop_front();
+
+                // The file-level checksum guarantees integrity of the data.
+                // To reduce the metadata log size, do not include checksums on
+                // individual objects.
+                ref.clear_checksum();
+
                 object_list.push_back(ref.to_string());
                 db->UseObject(ref);
             }
@@ -326,22 +333,19 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path,
         file_info["checksum"] = file_hash->digest_str();
     }
 
-    // Sanity check: if we are rebuilding the statcache, but the file looks
-    // like it hasn't changed, then the newly-computed checksum should match
-    // the checksum in the statcache.  If not, we have possible disk corruption
-    // and report a warning.
-    if (flag_rebuild_statcache) {
-        if (found
-            && metawriter->is_unchanged(&stat_buf)
-            && file_info["checksum"] != metawriter->get_checksum()) {
-            fprintf(stderr,
-                    "Warning: Checksum for %s does not match expected value\n"
-                    "    expected: %s\n"
-                    "    actual:   %s\n",
-                    path.c_str(),
-                    metawriter->get_checksum().c_str(),
-                    file_info["checksum"].c_str());
-        }
+    // Sanity check: if the file looks like it hasn't changed, then the
+    // newly-computed checksum should match the checksum in the statcache.  If
+    // not, we have possible disk corruption and report a warning.
+    if (found
+        && metawriter->is_unchanged(&stat_buf)
+        && file_info["checksum"] != metawriter->get_checksum()) {
+        fprintf(stderr,
+                "Warning: Checksum for %s does not match expected value\n"
+                "    expected: %s\n"
+                "    actual:   %s\n",
+                path.c_str(),
+                metawriter->get_checksum().c_str(),
+                file_info["checksum"].c_str());
     }
 
     if (verbose && status != NULL)
@@ -850,8 +854,8 @@ int main(int argc, char *argv[])
         dbmeta_filename += backup_scheme + "-";
     dbmeta_filename += timestamp + ".meta" + filter_extension;
     RemoteFile *dbmeta_file = remote->alloc_file(dbmeta_filename, "meta");
-    FileFilter *dbmeta_filter = FileFilter::New(dbmeta_file->get_fd(),
-                                                filter_program);
+    unique_ptr<FileFilter> dbmeta_filter(FileFilter::New(dbmeta_file->get_fd(),
+                                                         filter_program));
     if (dbmeta_filter == NULL) {
         fprintf(stderr, "Unable to open descriptor output file: %m\n");
         return 1;
@@ -899,8 +903,8 @@ int main(int argc, char *argv[])
 
     RemoteFile *descriptor_file = remote->alloc_file(desc_filename,
                                                      "snapshots");
-    FileFilter *descriptor_filter = FileFilter::New(descriptor_file->get_fd(),
-                                                    signature_filter.c_str());
+    unique_ptr<FileFilter> descriptor_filter(
+        FileFilter::New(descriptor_file->get_fd(), signature_filter.c_str()));
     if (descriptor_filter == NULL) {
         fprintf(stderr, "Unable to open descriptor output file: %m\n");
         return 1;