diff options
| author | jakob <jakob@memeware.net> | 2017-01-08 20:22:46 -0500 |
|---|---|---|
| committer | jakob <jakob@memeware.net> | 2017-01-08 20:22:46 -0500 |
| commit | 7d141c7e79bb9688a475b88722f6101ad01ef782 (patch) | |
| tree | c6afc8951270e57461ce25d32a32665ab52d7d6c /src/write.c | |
| parent | b3560b1005d3bc78a4f00a2279eb791209801a98 (diff) | |
Large commit. Filenames are now converted from UTF-16LE and placed into a linked list. Parsers also exist for every entry in the XP3 format.
Diffstat (limited to 'src/write.c')
| -rw-r--r-- | src/write.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/write.c b/src/write.c new file mode 100644 index 0000000..3cf04ca --- /dev/null +++ b/src/write.c @@ -0,0 +1,82 @@ +/* This file is part of Nekopack. + + Copyright (C) 2017 Jakob Tsar-Fox, All Rights Reserved. + + 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/>. */ + +#include <inttypes.h> +#include <stddef.h> +#include <stdint.h> +#include <stdlib.h> + +#include "write.h" + + +/* Document */ +char *pop_file_name(uint32_t key, node *root) { + /* The root node shouldn't contain anything. */ + if (root->next == NULL) + return NULL; + + const char *file_name = NULL; + node *current = root->next, *last = root; + for (;;) { + if (current->key == key) { + file_name = current->file_name; + last->next = current->next; + free(current->file_name); + free(current); + break; + } else if (current->next == NULL) { + break; + } else { + last = current; + current = current->next; + } + } + return file_name; +} + + +/* Document */ +void defer_node(node *new, node *root) { + node *current = root; + for (;;) { + if (current->next == NULL) { + current->next = new; + break; + } else { + current = current->next; + } + } +} + + +void test_linked_list(node *root) { + for (node *current = root; current != NULL; current = current->next) { + printf("NODE\n----\n"); + printf("KEY: %" PRIx32 "\n", current->key); + printf("FILE_NAME: %s\n\n", current->file_name); + } +} + + +/* Document */ +void free_node(node *base) { + if (base->next != NULL) { + free_node(base->next); + return; + } + free(base); +} |