summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorjakob <jakob@memeware.net>2017-05-14 19:07:06 -0400
committerjakob <jakob@memeware.net>2017-05-14 19:07:06 -0400
commit2ba0b505ce1ee748f42a85f7e27906737fa47fc8 (patch)
treeeacdebd8beae803b8c04c41d93ccb0dc8d45e35a /src/main.c
parent41a7566c121a865b460649390a75473ac71eff1f (diff)
Initial data dumping functionality.
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index db7c21c..8949272 100644
--- a/src/main.c
+++ b/src/main.c
@@ -208,15 +208,29 @@ static void create_archive(char **paths, int argc, struct params p) {
return;
}
- struct table_entry *cur, *root = calloc(sizeof(struct table_entry), 1);
- struct header *h = create_header();
- struct stream *table = stream_new(1);
+ struct table_entry *root = calloc(sizeof(struct table_entry), 1);
+ struct table_entry *cur;
+ struct header *h = create_header();
+ struct stream *data = stream_new(1);
+ struct stream *table = stream_new(1);
+ struct stream *file;
+ uint64_t data_size = 0;
uint64_t table_size;
dump_header(fp, h);
for (int i = 1; i < argc - p.vararg_index; i++) {
+ file = stream_from_file(paths[i]);
+ if (file == NULL) {
+ perror(paths[i]);
+ continue;
+ }
+
+ data_size += file->len;
+ stream_concat(data, file, file->len);
cur = add_file(root, paths[i]);
}
+ stream_seek(data, 0, SEEK_SET);
+ stream_dump(fp, data, data_size);
table_size = dump_table(table, root);
stream_dump(fp, table, table_size);
}