93 lines
1.7 KiB
C
93 lines
1.7 KiB
C
/*
|
|
* This software is licensed under the terms of the MIT-License
|
|
* See COPYING for further information.
|
|
* ---
|
|
* Copyright (c) 2011-2019, Lukas Weber <laochailan@web.de>.
|
|
* Copyright (c) 2012-2019, Andrei Alexeyev <akari@alienslab.net>.
|
|
*/
|
|
|
|
#include "taisei.h"
|
|
|
|
#include "io.h"
|
|
#include "log.h"
|
|
#include "vfs/public.h"
|
|
#include "assert.h"
|
|
#include "stringops.h"
|
|
|
|
char* read_all(const char *filename, int *outsize) {
|
|
char *text;
|
|
size_t size;
|
|
|
|
SDL_RWops *file = vfs_open(filename, VFS_MODE_READ | VFS_MODE_SEEKABLE);
|
|
|
|
if(!file) {
|
|
log_error("VFS error: %s", vfs_get_error());
|
|
return NULL;
|
|
}
|
|
|
|
size = SDL_RWsize(file);
|
|
|
|
text = malloc(size+1);
|
|
SDL_RWread(file, text, size, 1);
|
|
text[size] = 0;
|
|
|
|
SDL_RWclose(file);
|
|
|
|
if(outsize) {
|
|
*outsize = size;
|
|
}
|
|
|
|
return text;
|
|
}
|
|
|
|
char* SDL_RWgets(SDL_RWops *rwops, char *buf, size_t bufsize) {
|
|
char c, *ptr = buf, *end = buf + bufsize - 1;
|
|
assert(end > ptr);
|
|
|
|
while((c = SDL_ReadU8(rwops)) && ptr <= end) {
|
|
if((*ptr++ = c) == '\n')
|
|
break;
|
|
}
|
|
|
|
if(ptr == buf)
|
|
return NULL;
|
|
|
|
if(ptr > end) {
|
|
*end = 0;
|
|
log_warn("Line too long (%zu bytes max): %s", bufsize, buf);
|
|
} else {
|
|
*ptr = 0;
|
|
}
|
|
|
|
return buf;
|
|
}
|
|
|
|
size_t SDL_RWprintf(SDL_RWops *rwops, const char* fmt, ...) {
|
|
va_list args;
|
|
va_start(args, fmt);
|
|
char *str = vstrfmt(fmt, args);
|
|
va_end(args);
|
|
|
|
size_t ret = SDL_RWwrite(rwops, str, 1, strlen(str));
|
|
free(str);
|
|
|
|
return ret;
|
|
}
|
|
|
|
void tsfprintf(FILE *out, const char *restrict fmt, ...) {
|
|
va_list args;
|
|
va_start(args, fmt);
|
|
vfprintf(out, fmt, args);
|
|
va_end(args);
|
|
}
|
|
|
|
char* try_path(const char *prefix, const char *name, const char *ext) {
|
|
char *p = strjoin(prefix, name, ext, NULL);
|
|
|
|
if(vfs_query(p).exists) {
|
|
return p;
|
|
}
|
|
|
|
free(p);
|
|
return NULL;
|
|
}
|