Compare commits
9 Commits
7b472cac4b
...
main
Author | SHA1 | Date | |
---|---|---|---|
90b5acd002 | |||
e8fbe275f7 | |||
ae61eef10a | |||
fb1d1697f1 | |||
2f3d8106ea | |||
1f423b1d9b | |||
07a223f250 | |||
b2dc73148e | |||
1be318c239 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,5 +1,5 @@
|
||||
.cache
|
||||
compile_commands.json
|
||||
pckr
|
||||
libpakrd.a
|
||||
libpakrd.so
|
||||
dist
|
||||
|
57
compile
57
compile
@@ -1,27 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
#ESCAPE SEQUENCES
|
||||
CLEAR="\033[0m"
|
||||
BOLD="\033[1"
|
||||
FG_BLACK="\033[30"
|
||||
FG_RED="\033[31"
|
||||
FG_GREEN="\033[32"
|
||||
FG_YELLOW="\033[33"
|
||||
FG_BLUE="\033[34"
|
||||
FG_MAGENTA="\033[35"
|
||||
FG_CYAN="\033[36"
|
||||
FG_WHITE="\033[37"
|
||||
FG_BR_BLACK="\033[90"
|
||||
FG_BR_RED="\033[91"
|
||||
FG_BR_GREEN="\033[92"
|
||||
FG_BR_YELLOW="\033[93"
|
||||
FG_BR_BLUE="\033[94"
|
||||
FG_BR_MAGENTA="\033[95"
|
||||
FG_BR_CYAN="\033[96"
|
||||
FG_BR_WHITE="\033[97"
|
||||
|
||||
CC=clang
|
||||
AR=ar
|
||||
CC=gcc
|
||||
CFLAGS="-Wall -Werror -pedantic -Iinclude -Iintern/c-cpp-aliases -Iintern/cpath/include "
|
||||
|
||||
PCKR_SRC="\
|
||||
@@ -38,7 +17,7 @@ PAKRD_SRC="\
|
||||
src/io.c \
|
||||
src/darr.c \
|
||||
src/pak.c"
|
||||
PAKRD_FLAGS="-c -fPIC"
|
||||
PAKRD_FLAGS="-fPIC -rdynamic -shared "
|
||||
|
||||
PCKR_TEST_SRC="\
|
||||
intern/cpath/src/cpath.c \
|
||||
@@ -74,13 +53,13 @@ done
|
||||
if [[ $BUILD_TYPE == "debug" ]]; then
|
||||
CFLAGS+="-g "
|
||||
PCKR_OUT="pckr"
|
||||
PAKRD_OUT="libpakrd.a"
|
||||
PAKRD_OUT="libpakrd.so"
|
||||
else
|
||||
mkdir dist
|
||||
mkdir -p dist
|
||||
cp ./include/pak.h dist
|
||||
CFLAGS+="-O3 "
|
||||
PCKR_OUT="dist/pckr"
|
||||
PAKRD_OUT="dist/libpakrd.a"
|
||||
PAKRD_OUT="dist/libpakrd.so"
|
||||
fi
|
||||
|
||||
|
||||
@@ -88,9 +67,8 @@ fi
|
||||
(set -x ; $CC $CFLAGS $PCKR_SRC -o $PCKR_OUT)
|
||||
|
||||
|
||||
# Build pakrd static library
|
||||
(set -x ; $CC $CFLAGS $PAKRD_FLAGS $PAKRD_SRC ; $AR r $PAKRD_OUT *.o)
|
||||
rm *.o
|
||||
# Build pakrd shared library
|
||||
(set -x ; $CC $CFLAGS $PAKRD_FLAGS $PAKRD_SRC -o $PAKRD_OUT)
|
||||
|
||||
|
||||
# Build pckr_test executable
|
||||
@@ -105,6 +83,27 @@ rm *.o
|
||||
./pckr ./test_assets ./assets
|
||||
|
||||
|
||||
#ESCAPE SEQUENCES
|
||||
CLEAR="\033[0m"
|
||||
BOLD="\033[1"
|
||||
FG_BLACK="\033[30"
|
||||
FG_RED="\033[31"
|
||||
FG_GREEN="\033[32"
|
||||
FG_YELLOW="\033[33"
|
||||
FG_BLUE="\033[34"
|
||||
FG_MAGENTA="\033[35"
|
||||
FG_CYAN="\033[36"
|
||||
FG_WHITE="\033[37"
|
||||
FG_BR_BLACK="\033[90"
|
||||
FG_BR_RED="\033[91"
|
||||
FG_BR_GREEN="\033[92"
|
||||
FG_BR_YELLOW="\033[93"
|
||||
FG_BR_BLUE="\033[94"
|
||||
FG_BR_MAGENTA="\033[95"
|
||||
FG_BR_CYAN="\033[96"
|
||||
FG_BR_WHITE="\033[97"
|
||||
|
||||
|
||||
# Run pckr_test
|
||||
(./$PCKR_TEST_OUT && echo -e "\npckr_test [${FG_BR_GREEN}m${BOLD}m SUCCESS $CLEAR]") || echo -e "\npckr_test [${FG_BR_RED}m${BOLD}m FAILURE $CLEAR]"
|
||||
|
||||
|
@@ -1,6 +1,10 @@
|
||||
#ifndef ARGPARSE_H
|
||||
#define ARGPARSE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
#include "aliases.h"
|
||||
#include <linux/limits.h>
|
||||
#include <stdbool.h>
|
||||
@@ -17,4 +21,8 @@ typedef struct {
|
||||
|
||||
argparser_t parse_args(i32 argc, char *argv[]);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // !ARGPARSE_H
|
||||
|
@@ -1,6 +1,10 @@
|
||||
#ifndef D_ARR_H
|
||||
#define D_ARR_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
#include "aliases.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
@@ -13,4 +17,8 @@ i64 darr_add(darr_t **darr, void *item);
|
||||
void **darr_get_items(darr_t *darr);
|
||||
void darr_free(darr_t **darr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // !D_ARR_H
|
||||
|
@@ -1,6 +1,10 @@
|
||||
#ifndef IO_H
|
||||
#define IO_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
#include "aliases.h"
|
||||
#include <linux/limits.h>
|
||||
#include <stdbool.h>
|
||||
@@ -21,4 +25,8 @@ u64 get_file_length(FILE *fp);
|
||||
void read_entire_file(void *dst, FILE *fp);
|
||||
dirwalk_result_t walk_dir(dirwalk_t **dirwalk, const char *filepath);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // !IO_H
|
||||
|
@@ -1,6 +1,10 @@
|
||||
#ifndef PAK_H
|
||||
#define PAK_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
#include "aliases.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
@@ -45,4 +49,8 @@ buf_t *read_file_from_pack(asset_pack_t *pack, const char *filename);
|
||||
void close_pack_file(buf_t **buf);
|
||||
void close_asset_pack(asset_pack_t **pack);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // !PAK_H
|
||||
|
@@ -1,8 +1,16 @@
|
||||
#ifndef PCKR_H
|
||||
#define PCKR_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
#include "aliases.h"
|
||||
|
||||
i32 run_pckr(i32 argc, char *argv[]);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // !PCKR_H
|
||||
|
@@ -1,6 +1,10 @@
|
||||
#ifndef TEST_UTILS_H
|
||||
#define TEST_UTILS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
#define ARRLEN(ARR) (sizeof ARR / sizeof ARR[0])
|
||||
|
||||
typedef struct {
|
||||
@@ -8,4 +12,8 @@ typedef struct {
|
||||
const char *contents;
|
||||
} asset_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // !TEST_UTILS_H
|
||||
|
Submodule intern/cpath updated: 833ee11a4e...076b1310e3
@@ -7,10 +7,9 @@ argparser_t parse_args(i32 argc, char *argv[]) {
|
||||
return (argparser_t){0};
|
||||
}
|
||||
|
||||
argparser_t output = {
|
||||
.succeeded = true,
|
||||
.args = (pckr_args_t){0},
|
||||
};
|
||||
argparser_t output = {0};
|
||||
output.succeeded = true;
|
||||
output.args = (pckr_args_t){0};
|
||||
|
||||
realpath(argv[1], output.args.dir);
|
||||
realpath(argv[2], output.args.output);
|
||||
|
@@ -40,7 +40,7 @@ i64 darr_add(darr_t **darr, void *item) {
|
||||
return INVALID_IDX;
|
||||
}
|
||||
|
||||
(*darr)->capacity = orig->capacity + BASE_CAPACITY;
|
||||
(*darr)->capacity += BASE_CAPACITY;
|
||||
}
|
||||
|
||||
u64 index = (*darr)->count;
|
||||
|
14
src/io.c
14
src/io.c
@@ -16,8 +16,8 @@ struct dirwalk {
|
||||
u64 count;
|
||||
FILE *current_file;
|
||||
DIR *current_dir;
|
||||
char dst[PATH_MAX];
|
||||
DIR *directories[MAX_DIR_DEPTH];
|
||||
char dst[PATH_MAX + 1];
|
||||
DIR *directories[MAX_DIR_DEPTH + 1];
|
||||
};
|
||||
|
||||
u64 get_file_length(FILE *fp) {
|
||||
@@ -73,7 +73,7 @@ dirwalk_result_t walk_dir(dirwalk_t **dirwalk, const char *filepath) {
|
||||
|
||||
dirwalk_t *dw = *dirwalk;
|
||||
|
||||
char tmp[PATH_MAX] = {0};
|
||||
char tmp[PATH_MAX + 1] = {0};
|
||||
|
||||
dirent_t *ep = NULL;
|
||||
stat_t dirstat = {0};
|
||||
@@ -102,7 +102,7 @@ dirwalk_result_t walk_dir(dirwalk_t **dirwalk, const char *filepath) {
|
||||
|
||||
result.reading = true;
|
||||
result.fp = dw->current_file;
|
||||
strncpy(result.name, ep->d_name, NAME_MAX);
|
||||
strncpy(result.name, ep->d_name, NAME_MAX + 1);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -116,7 +116,7 @@ dirwalk_result_t walk_dir(dirwalk_t **dirwalk, const char *filepath) {
|
||||
if ((dirstat.st_mode & S_IFDIR) == S_IFDIR) {
|
||||
memset(dw->dst, 0, length);
|
||||
|
||||
strncpy(dw->dst, tmp, length);
|
||||
strncpy(dw->dst, tmp, length + 1);
|
||||
|
||||
dw->directories[(dw->count)++] = opendir(dw->dst);
|
||||
|
||||
@@ -128,7 +128,7 @@ dirwalk_result_t walk_dir(dirwalk_t **dirwalk, const char *filepath) {
|
||||
|
||||
result.reading = true;
|
||||
result.fp = dw->current_file;
|
||||
strncpy(result.name, ep->d_name, NAME_MAX);
|
||||
strncpy(result.name, ep->d_name, NAME_MAX + 1);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -150,7 +150,7 @@ dirwalk_result_t walk_dir(dirwalk_t **dirwalk, const char *filepath) {
|
||||
|
||||
u64 length = strlen(dw->dst);
|
||||
|
||||
strncpy(tmp, dw->dst, length);
|
||||
strcpy(tmp, dw->dst);
|
||||
|
||||
memset(dw->dst, 0, length);
|
||||
|
||||
|
14
src/pak.c
14
src/pak.c
@@ -34,13 +34,11 @@ void write_pak(const pak_t *pak, toc_entry_t **toc_entries,
|
||||
bool create_asset_pack(const char *dirpath, const char *output) {
|
||||
bool created = false;
|
||||
|
||||
char dst[PATH_MAX] = {0};
|
||||
char dst[PATH_MAX + 1] = {0};
|
||||
|
||||
u64 output_length = strlen(output);
|
||||
strncpy(dst, output, output_length);
|
||||
strcpy(dst, output);
|
||||
|
||||
u64 ext_length = strlen(PAK_EXT);
|
||||
strncat(dst, PAK_EXT, ext_length);
|
||||
strcat(dst, PAK_EXT);
|
||||
|
||||
FILE *fp = fopen(dst, "wb");
|
||||
if (!fp) {
|
||||
@@ -130,6 +128,8 @@ asset_pack_t *load_asset_pack(const char *filepath) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset((void *)pack, 0, sizeof(asset_pack_t));
|
||||
|
||||
pack->fp = fopen(full_path, "rb");
|
||||
if (!(pack->fp)) {
|
||||
close_asset_pack(&pack);
|
||||
@@ -229,7 +229,9 @@ void close_asset_pack(asset_pack_t **pack) {
|
||||
free((*pack)->toc);
|
||||
}
|
||||
|
||||
if ((*pack)->fp) {
|
||||
fclose((*pack)->fp);
|
||||
}
|
||||
|
||||
free(*pack);
|
||||
|
||||
@@ -250,7 +252,7 @@ toc_entry_t *create_toc_entry(const char *name, u64 offset) {
|
||||
entry->offset = offset;
|
||||
entry->length = length + 1;
|
||||
|
||||
strncpy(entry->name, name, length);
|
||||
strcpy(entry->name, name);
|
||||
|
||||
return entry;
|
||||
}
|
||||
|
Reference in New Issue
Block a user