X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=scandir.cc;h=82160a162c04b750786988f0b2ee6a585aa80d51;hb=a4cf5f4d8df46fa00992a210d587cd824cedcb08;hp=db0961b6a9ec217feb038ccd987bc678ce504315;hpb=65463770d838a346c25ba559ad4e7a10ffc40bc2;p=cumulus.git diff --git a/scandir.cc b/scandir.cc index db0961b..82160a1 100644 --- a/scandir.cc +++ b/scandir.cc @@ -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, @@ -671,7 +675,6 @@ int main(int argc, char *argv[]) printf(" %s\n", i->c_str()); } - tss = new TarSegmentStore(backup_dest); block_buf = new char[LBS_BLOCK_SIZE]; /* Store the time when the backup started, so it can be included in the @@ -691,6 +694,8 @@ int main(int argc, char *argv[]) db->Open(database_path.c_str(), desc_buf, backup_scheme.size() ? backup_scheme.c_str() : NULL); + tss = new TarSegmentStore(backup_dest, db); + /* Initialize the stat cache, for skipping over unchanged files. */ statcache = new StatCache; statcache->Open(localdb_dir.c_str(), desc_buf, @@ -711,8 +716,6 @@ int main(int argc, char *argv[]) string backup_root = root->get_ref().to_string(); delete root; - db->Close(); - statcache->Close(); delete statcache; @@ -720,6 +723,8 @@ int main(int argc, char *argv[]) tss->dump_stats(); delete tss; + db->Close(); + /* Write a backup descriptor file, which says which segments are needed and * where to start to restore this snapshot. The filename is based on the * current time. */