diff options
| author | jakob <jakob@memeware.net> | 2017-05-14 19:07:06 -0400 |
|---|---|---|
| committer | jakob <jakob@memeware.net> | 2017-05-14 19:07:06 -0400 |
| commit | 2ba0b505ce1ee748f42a85f7e27906737fa47fc8 (patch) | |
| tree | eacdebd8beae803b8c04c41d93ccb0dc8d45e35a /src/main.c | |
| parent | 41a7566c121a865b460649390a75473ac71eff1f (diff) | |
Initial data dumping functionality.
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 20 |
1 files changed, 17 insertions, 3 deletions
@@ -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); } |