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) {
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
int main(int argc, char *argv[])
{
- string backup_source = ".";
string backup_dest = "";
string localdb_dir = "";
string backup_scheme = "";
}
}
- 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,
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
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,
string backup_root = root->get_ref().to_string();
delete root;
- db->Close();
-
statcache->Close();
delete statcache;
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. */