test: cover fpk_writer_add_dir round trip

This commit is contained in:
2026-09-16 22:11:52 +02:00
parent ba77b1d938
commit cce89bb6e4
+58
View File
@@ -3,6 +3,17 @@
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#include <direct.h>
#define MKDIR(path) _mkdir(path)
#define RMDIR(path) _rmdir(path)
#else
#include <sys/stat.h>
#include <unistd.h>
#define MKDIR(path) mkdir(path, 0755)
#define RMDIR(path) rmdir(path)
#endif
#define CHECK(cond, msg) \
do { \
if (!(cond)) { \
@@ -13,6 +24,14 @@
static const char *PAK_PATH = "roundtrip.fpk";
static void write_file(const char *path, const char *data)
{
FILE *fp = fopen(path, "wb");
fwrite(data, 1, strlen(data), fp);
fclose(fp);
}
int main(void)
{
struct fpk_writer *w;
@@ -66,6 +85,45 @@ int main(void)
fpk_close(r);
remove(PAK_PATH);
CHECK(MKDIR("adddir_src") == 0, "mkdir(adddir_src) failed");
CHECK(MKDIR("adddir_src/nested") == 0, "mkdir(adddir_src/nested) failed");
write_file("adddir_src/root.txt", "root");
write_file("adddir_src/nested/leaf.txt", "leaf");
w = fpk_writer_open("adddir.fpk");
CHECK(w != NULL, "fpk_writer_open(adddir) failed");
CHECK(fpk_writer_add_dir(w, "adddir_src", NULL, NULL) == 0,
"fpk_writer_add_dir failed");
CHECK(fpk_writer_finalize(w) == 0, "fpk_writer_finalize(adddir) failed");
fpk_writer_close(w);
r = fpk_open("adddir.fpk");
CHECK(r != NULL, "fpk_open(adddir) failed");
CHECK(fpk_entry_count(r) == 2, "adddir entry_count mismatch");
entry = fpk_find(r, "root.txt");
CHECK(entry != NULL, "fpk_find(root.txt) failed");
data = fpk_read(r, entry, &out_size);
CHECK(data != NULL, "fpk_read(root.txt) failed");
CHECK(out_size == 4 && memcmp(data, "root", 4) == 0,
"root.txt content mismatch");
free(data);
entry = fpk_find(r, "nested/leaf.txt");
CHECK(entry != NULL, "fpk_find(nested/leaf.txt) failed");
data = fpk_read(r, entry, &out_size);
CHECK(data != NULL, "fpk_read(nested/leaf.txt) failed");
CHECK(out_size == 4 && memcmp(data, "leaf", 4) == 0,
"nested/leaf.txt content mismatch");
free(data);
fpk_close(r);
remove("adddir.fpk");
remove("adddir_src/root.txt");
remove("adddir_src/nested/leaf.txt");
RMDIR("adddir_src/nested");
RMDIR("adddir_src");
printf("PASS\n");
return EXIT_SUCCESS;
}