40 lines
1.4 KiB
C
40 lines
1.4 KiB
C
#include <stdlib.h>
|
|
#include <SDL3/SDL.h>
|
|
#include "readfile.h"
|
|
|
|
char *readFile ( const char *fileName )
|
|
{
|
|
SDL_IOStream *ioStream = SDL_IOFromFile(fileName, "rb");
|
|
if (!ioStream) {
|
|
SDL_LogCritical(SDL_LOG_CATEGORY_ASSERT, "ioStream: %s.", SDL_GetError());
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
if (SDL_SeekIO(ioStream, 0, SDL_IO_SEEK_END) == -1) {
|
|
SDL_LogCritical(SDL_LOG_CATEGORY_ASSERT, "SDL_SeekIO_END: %s.", SDL_GetError());
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
long len = SDL_TellIO(ioStream);
|
|
if (len == -1) {
|
|
SDL_LogCritical(SDL_LOG_CATEGORY_ASSERT, "SDL_TellIO: %s.", SDL_GetError());
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
if (SDL_SeekIO(ioStream, 0, SDL_IO_SEEK_SET) == -1) {
|
|
SDL_LogCritical(SDL_LOG_CATEGORY_ASSERT, "SDL_IO_SEEK_SET: %s.", SDL_GetError());
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
char *res = SDL_malloc(len + 1);
|
|
if (!res) {
|
|
SDL_LogCritical(SDL_LOG_CATEGORY_ASSERT, "SDL_malloc: %s.", SDL_GetError());
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
if (SDL_ReadIO(ioStream, res, len) != (size_t)len) {
|
|
SDL_LogCritical(SDL_LOG_CATEGORY_ASSERT, "SDL_ReadIO: %s.", SDL_GetError());
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
if (!SDL_CloseIO(ioStream)) {
|
|
SDL_LogCritical(SDL_LOG_CATEGORY_ASSERT, "SDL_CloseIO: %s.", SDL_GetError());
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
res[len] = 0;
|
|
return res;
|
|
}
|