§ Загрузка файла в память

На вход подается строка с указанием, где файл находится, на выходе получается либо указатель на массив байтов, либо NULL, если файл не прочтён. Недостатки - невозможность напрямую узнать размер строки.
1uint8_t* loadfile(const char* filename) {
2
3    int rc, n = 0;
4
5    FILE* fp = fopen(filename, "rb");
6    if (fp == NULL) return NULL;
7
8    // Определить размер файла
9    fseek(fp, 0, SEEK_END);
10    int fsize = ftell(fp);
11    fseek(fp, 0, SEEK_SET);
12
13    // Выделить память
14    uint8_t* memptr = (uint8_t*) malloc(fsize);
15
16    // Загрузка чанками
17    while ((rc = fread(mm + n, 1, 4096, fp))) n += rc;
18
19    return memptr;
20}