summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2015-11-08 22:03:34 -0800
committerMichael Pavone <pavone@retrodev.com>2015-11-08 22:03:34 -0800
commit7d6031ae997cfd08b51e687cc68d11d572b23bf7 (patch)
tree171a5092126e95f3ccd17a8a2c0c98434b7a7e7e /util.c
parent9fed70ee51604f4bdf49dfebad4658c5cc2bfdd1 (diff)
Make menu stuff work on Android (theoretically)
Diffstat (limited to 'util.c')
-rw-r--r--util.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/util.c b/util.c
index c4b25f5..d579348 100644
--- a/util.c
+++ b/util.c
@@ -321,3 +321,94 @@ void free_dir_list(dir_entry *list, size_t numentries)
}
#endif
+
+#ifdef __ANDROID__
+
+#include <SDL.h>
+char *read_bundled_file(char *name, long *sizeret)
+{
+ SDL_RWops *rw = SDL_RWFromFile(config_path, "rb");
+ if (!rw) {
+ if (sizeret) {
+ *sizeret = -1;
+ }
+ return NULL;
+ }
+
+ long fsize = rw->size(rw);
+ if (sizeret) {
+ *sizeret = fsize;
+ }
+ char *ret;
+ if (fsize) {
+ ret = malloc(fsize);
+ if (SDL_RWread(rw, ret, 1, fsize) != fsize) {
+ free(ret);
+ ret = NULL;
+ }
+ } else {
+ ret = NULL;
+ }
+ SDL_RWclose(rw);
+ return ret;
+}
+
+char *get_config_dir()
+{
+ return SDL_AndroidGetInternalStoragePath();
+}
+
+#else
+
+char *read_bundled_file(char *name, long *sizeret)
+{
+ char *exe_dir = get_exe_dir();
+ if (!exe_dir) {
+ if (sizeret) {
+ *sizeret = -1;
+ }
+ return NULL;
+ }
+ char *pieces[] = {exe_dir, "/", name};
+ char *path = alloc_concat_m(3, pieces);
+ FILE *f = fopen(path, "rb");
+ free(path);
+ if (!f) {
+ if (sizeret) {
+ *sizeret = -1;
+ }
+ return NULL;
+ }
+
+ long fsize = file_size(f);
+ if (sizeret) {
+ *sizeret = fsize;
+ }
+ char *ret;
+ if (fsize) {
+ //reserve an extra byte in case caller wants
+ //to null terminate the data
+ ret = malloc(fsize+1);
+ if (fread(ret, 1, fsize, f) != fsize) {
+ free(ret);
+ ret = NULL;
+ }
+ } else {
+ ret = NULL;
+ }
+ return ret;
+}
+
+char *get_config_dir()
+{
+ static char* confdir;
+ if (!confdir) {
+ char *homedir = get_home_dir();
+ if (homedir) {
+ confdir = alloc_concat(homedir, "/.config/blastem");
+ }
+ }
+ return confdir;
+}
+
+#endif