From ace85e64a0988a6cad97742af35cd65babd63d5b Mon Sep 17 00:00:00 2001 From: Dorian Zedler Date: Wed, 20 Jul 2022 12:22:43 +0200 Subject: [PATCH] Fix: make sure there is enough ram available --- Implementierung/benchmarks.csv | 1 - Implementierung/lib/io.h | 1 + Implementierung/src/io.c | 11 +++++++++++ Implementierung/src/main.c | 4 +++- 4 files changed, 15 insertions(+), 2 deletions(-) delete mode 100644 Implementierung/benchmarks.csv diff --git a/Implementierung/benchmarks.csv b/Implementierung/benchmarks.csv deleted file mode 100644 index 8b13789..0000000 --- a/Implementierung/benchmarks.csv +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Implementierung/lib/io.h b/Implementierung/lib/io.h index 6887f25..532b58c 100644 --- a/Implementierung/lib/io.h +++ b/Implementierung/lib/io.h @@ -9,6 +9,7 @@ #include #include #include +#include /** * @brief Open a file and load its stats diff --git a/Implementierung/src/io.c b/Implementierung/src/io.c index 339bd75..857a996 100644 --- a/Implementierung/src/io.c +++ b/Implementierung/src/io.c @@ -33,7 +33,18 @@ uint8_t* read_file(const char* path, size_t* size) { return NULL; } + struct sysinfo info; + int r = sysinfo(&info); + if (r != 0 || info.freeram < (unsigned long)statOfFile.st_size * 2) { + errno = ENOMEM; + return NULL; + } + uint8_t* data = malloc(statOfFile.st_size); + if (data == NULL) { + fclose(f); + return NULL; + } size_t bytesRead = fread(data, statOfFile.st_blksize, statOfFile.st_blocks, f); diff --git a/Implementierung/src/main.c b/Implementierung/src/main.c index 94b7a7a..5e8a951 100644 --- a/Implementierung/src/main.c +++ b/Implementierung/src/main.c @@ -138,8 +138,10 @@ int main(int argc, char** argv) { char hash[32]; if (!calculate_hash(c, hash)) { if (errno != 0) { - fprintf(stderr, "\n\033[0;31mAn error occured: %s\033[0m\n", + fprintf(stderr, "\n\033[1;31mAn error occured: %s\033[0m\n", strerror(errno)); + if (errno == ENOMEM) + fprintf(stderr, "\033[1;36mPlease try to use -V2!\033[0m\n"); } return EXIT_FAILURE; }