diff options
| author | jakob <jakob@memeware.net> | 2017-02-19 10:57:47 -0500 |
|---|---|---|
| committer | jakob <jakob@memeware.net> | 2017-02-19 10:57:47 -0500 |
| commit | 32fb7b11d83138cc288d62c1f1674d95cc94e8de (patch) | |
| tree | 290c5a27b58e24bb82bd46decba0aa5e1282e003 /src/table.h | |
| parent | 1fc6cc323dbaa5387d84630615c0d4cab0c1c5ba (diff) | |
Implemented table linked list, decompression and encryption. Tests have been improved.
Diffstat (limited to 'src/table.h')
| -rw-r--r-- | src/table.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/table.h b/src/table.h new file mode 100644 index 0000000..488e67f --- /dev/null +++ b/src/table.h @@ -0,0 +1,56 @@ +/* table.h -- Code for handling the archive's table section. + + Copyright (C) 2017 Jakob Tsar-Fox, All Rights Reserved. + + This file is part of Nekopack. + + Nekopack is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at + your option) any later version. + + Nekopack is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Nekopack. If not, see <http://www.gnu.org/licenses/>. */ + +#pragma once + +#include <stdbool.h> +#include <stdint.h> + +#include "io.h" + + +/* Structure representing one segment associated with a File entry. */ +struct segment { + bool compressed; /* Whether or not the segment is compressed. */ + uint64_t offset; /* Offset to the segment's beginning. */ + uint64_t compressed_size; /* Size of compressed segment. */ + uint64_t decompressed_size; /* Size of decompressed segment. */ +}; + +/* Structure representing an entry in the archive's table section. */ +struct table_entry { + bool encrypted; /* Whether or not it's encrypted. */ + bool compressed; /* Whether or not it's compressed. */ + uint32_t key; /* File-specific key for encryption. */ + uint64_t ctime; /* Timestamp of creation time. */ + uint64_t segment_count; /* Number of segments. */ + struct segment **segments; /* Array of associated segments. */ + struct table_entry *next; /* Pointer to the next entry. */ +}; + + +/* Returns the root of a linked list containing all of the files listed + in the archive's table section. */ +struct table_entry *parse_table(struct stream *s); + +/* Inserts `e` to the end of the linked list specified by `root`. */ +void entry_append(struct table_entry *root, struct table_entry *e); + +/* Frees every entry in the linked list specified by `cur`. */ +void entry_free(struct table_entry *cur); |