mobiground/readfile.c
2025-02-21 15:29:37 +02:00

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;
}