From e8338d011d6c5ec33fe59d821b279a0a13cd9547 Mon Sep 17 00:00:00 2001 From: lisk77 Date: Sun, 17 Aug 2025 17:07:16 +0200 Subject: [PATCH] feat(file): added empty file creation and slicing a file --- include/file.h | 2 ++ src/file.c | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/file.h b/include/file.h index 405e18d..79fcb10 100644 --- a/include/file.h +++ b/include/file.h @@ -11,6 +11,8 @@ typedef struct { uint64_t lines; } File; +File* new_empty_file(); File* new_file(const char*); +File* slice_file(File*, uint64_t, uint64_t); #endif // FILE_H diff --git a/src/file.c b/src/file.c index b442f46..8c32129 100644 --- a/src/file.c +++ b/src/file.c @@ -1,5 +1,13 @@ #include "file.h" +File* new_empty_file() { + File* file = calloc(1, sizeof(File)); + file->content = NULL; + file->lines = 0; + + return file; +} + File* new_file(const char* path) { if (!path) return NULL; FILE* f = fopen(path, "rb"); @@ -45,3 +53,17 @@ File* new_file(const char* path) { return file; } + +File* slice_file(File* original, uint64_t start, uint64_t end) { + if (!original || (end < start) || (end > original->lines)) return NULL; + + File* slice = calloc(1, sizeof(File)); + if (!slice) return NULL; + + uint64_t lines = end-start; + if (!original->content || lines == 0) return NULL; + + slice->content = original->content + start; + slice->lines = lines; + return slice; +}