Find cdh in zip

This commit is contained in:
atxr 2024-02-06 15:16:41 +01:00
parent 0b199784ec
commit 4692b1e643
2 changed files with 35 additions and 2 deletions

View file

@ -1,15 +1,27 @@
#ifndef LIBMINEZIPER_ZIP_H
#define LIBMINEZIPER_ZIP_H
#define START_CDH_SEARCH 22
#define CDH_MB "PK\05\06"
#define LFH_MB "PK\03\04"
typedef struct raw
{
char* buf;
int size;
} raw;
typedef struct CDH
{
void* crc32; // TODO TYPE?
char mb[4]; // CDH_MB "PK\05\06"
void* crc32; // TODO TYPE?
LFH* lfh;
void* filename; // TODO TYPE?
void* filename; // TODO TYPE?
} CDH;
typedef struct LFH
{
char mb[4]; // CDH_MB "PK\03\04"
void* crc32; // TODO TYPE?
LFH* lfh;
int size_compressed_data;
@ -24,6 +36,7 @@ typedef struct zip
CDH* central_directory;
} zip;
void find_cdh(raw* raw, zip* out);
void parse_zip(char* filename, zip* out);
#endif

View file

@ -0,0 +1,20 @@
#include "libmineziper_zip.h"
#include <string.h>
void find_cdh(raw* raw, zip* out)
{
if (raw->size < START_CDH_SEARCH)
return;
char* se = raw->buf + raw->size - START_CDH_SEARCH;
while (se > raw->buf)
{
if (strcmp(se, CDH_MB) == 0)
{
zip->cdh = se;
break;
}
se--;
}
}