From fb2072deb3e50afdb062570a3a80ec1afb5bfb56 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 9 Dec 2017 01:14:41 +0100 Subject: Finished project config file parsing --- src/FileUtil.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'src/FileUtil.cpp') diff --git a/src/FileUtil.cpp b/src/FileUtil.cpp index 511a324..30fe03d 100644 --- a/src/FileUtil.cpp +++ b/src/FileUtil.cpp @@ -18,7 +18,7 @@ namespace sibs } } - void walkDirectory(const char *directory, FileWalkCallbackFunc callbackFunc) + void walkDirFiles(const char *directory, FileWalkCallbackFunc callbackFunc) { tinydir_dir dir; tinydir_open(&dir, directory); @@ -27,30 +27,39 @@ namespace sibs { tinydir_file file; tinydir_readfile(&dir, &file); - callbackFunc(&file); + if(file.is_reg) + callbackFunc(&file); + else if(_tinydir_strcmp(file.name, ".") != 0 && _tinydir_strcmp(file.name, "..") != 0) + walkDirFiles(file.path, callbackFunc); tinydir_next(&dir); } tinydir_close(&dir); } - Result getFileContent(const char *filepath) + Result getFileContent(const char *filepath) { FILE *file = fopen(filepath, "rb"); if(!file || errno != 0) { perror(filepath); - return Result::Err("Failed to open file"); + return Result::Err("Failed to open file"); } fseek(file, 0, SEEK_END); size_t fileSize = ftell(file); fseek(file, 0, SEEK_SET); - string result; - result.resize(fileSize); - fread(&result[0], 1, fileSize, file); + char *result = (char*)malloc(fileSize + 1); + if(!result) + { + std::string errMsg = "Failed to load file content from file: "; + errMsg += filepath; + throw std::runtime_error(errMsg); + } + result[fileSize] = '\0'; + fread(result, 1, fileSize, file); fclose(file); - return Result::Ok(std::move(result)); + return Result::Ok(StringView(result, fileSize)); } } \ No newline at end of file -- cgit v1.2.3