Fix a double-close of a file descriptor.
[cumulus.git] / scandir.cc
index db0961b..1db5ec3 100644 (file)
@@ -305,6 +305,13 @@ void dump_inode(const string& path,         // Path within snapshot
         file_info["group"] += " (" + uri_encode(grp->gr_name) + ")";
     }
 
+    if (stat_buf.st_nlink > 1 && (stat_buf.st_mode & S_IFMT) != S_IFDIR) {
+        file_info["links"] = encode_int(stat_buf.st_nlink);
+        file_info["inode"] = encode_int(major(stat_buf.st_dev))
+            + "/" + encode_int(minor(stat_buf.st_dev))
+            + "/" + encode_int(stat_buf.st_ino);
+    }
+
     char inode_type;
 
     switch (stat_buf.st_mode & S_IFMT) {
@@ -344,7 +351,6 @@ void dump_inode(const string& path,         // Path within snapshot
 
         file_size = dumpfile(fd, file_info, path, stat_buf);
         file_info["size"] = encode_int(file_size);
-        close(fd);
 
         if (file_size < 0)
             return;             // error occurred; do not dump file
@@ -572,7 +578,6 @@ void usage(const char *program)
 
 int main(int argc, char *argv[])
 {
-    string backup_source = ".";
     string backup_dest = "";
     string localdb_dir = "";
     string backup_scheme = "";
@@ -627,15 +632,14 @@ int main(int argc, char *argv[])
         }
     }
 
-    searches.push_back(".");
     if (optind == argc) {
-        add_include(".");
-    } else {
-        for (int i = optind; i < argc; i++)
-            add_include(argv[i]);
+        usage(argv[0]);
+        return 1;
     }
 
-    backup_source = argv[optind];
+    searches.push_back(".");
+    for (int i = optind; i < argc; i++)
+        add_include(argv[i]);
 
     if (backup_dest == "") {
         fprintf(stderr,