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; +}