Fix: include cached ram in calculation

This commit is contained in:
Dorian Zedler 2022-07-23 18:06:25 +02:00
parent a7660901ec
commit 94dc4821ba
Signed by: dorian
GPG key ID: 989DE36109AFA354

View file

@ -24,6 +24,25 @@ bool open_file(const char* path, FILE** file, struct stat* file_stat) {
return true; return true;
} }
unsigned long get_available_memory() {
FILE* f;
struct stat statOfFile;
if (!open_file("/proc/meminfo", &f, &statOfFile)) {
return 0;
}
char line[100];
while (fgets(line, sizeof(line), f)) {
unsigned long available_memory;
if (sscanf(line, "MemAvailable: %ld kB", &available_memory) == 1) {
fclose(f);
return available_memory * 1000;
}
}
return 0;
}
uint8_t* read_file(const char* path, size_t* size) { uint8_t* read_file(const char* path, size_t* size) {
// Read the contents of the file specified by path into a heap-allocated // Read the contents of the file specified by path into a heap-allocated
// buffer and return a pointer to that buffer. // buffer and return a pointer to that buffer.
@ -33,10 +52,9 @@ uint8_t* read_file(const char* path, size_t* size) {
return NULL; return NULL;
} }
struct sysinfo info; unsigned long available_memory = get_available_memory();
int r = sysinfo(&info);
if (r != 0 || info.freeram < (unsigned long)(statOfFile.st_size * 2)) { if (available_memory < (unsigned long)(statOfFile.st_size * 2)) {
errno = ENOMEM; errno = ENOMEM;
return NULL; return NULL;
} }