comparison util.c @ 875:54ffba3768d6

Make menu stuff work on Android (theoretically)
author Michael Pavone <pavone@retrodev.com>
date Sun, 08 Nov 2015 22:03:34 -0800
parents 69a6ec208111
children 540cc4a7d626
comparison
equal deleted inserted replaced
874:b6842dfb8edf 875:54ffba3768d6
319 } 319 }
320 free(list); 320 free(list);
321 } 321 }
322 322
323 #endif 323 #endif
324
325 #ifdef __ANDROID__
326
327 #include <SDL.h>
328 char *read_bundled_file(char *name, long *sizeret)
329 {
330 SDL_RWops *rw = SDL_RWFromFile(config_path, "rb");
331 if (!rw) {
332 if (sizeret) {
333 *sizeret = -1;
334 }
335 return NULL;
336 }
337
338 long fsize = rw->size(rw);
339 if (sizeret) {
340 *sizeret = fsize;
341 }
342 char *ret;
343 if (fsize) {
344 ret = malloc(fsize);
345 if (SDL_RWread(rw, ret, 1, fsize) != fsize) {
346 free(ret);
347 ret = NULL;
348 }
349 } else {
350 ret = NULL;
351 }
352 SDL_RWclose(rw);
353 return ret;
354 }
355
356 char *get_config_dir()
357 {
358 return SDL_AndroidGetInternalStoragePath();
359 }
360
361 #else
362
363 char *read_bundled_file(char *name, long *sizeret)
364 {
365 char *exe_dir = get_exe_dir();
366 if (!exe_dir) {
367 if (sizeret) {
368 *sizeret = -1;
369 }
370 return NULL;
371 }
372 char *pieces[] = {exe_dir, "/", name};
373 char *path = alloc_concat_m(3, pieces);
374 FILE *f = fopen(path, "rb");
375 free(path);
376 if (!f) {
377 if (sizeret) {
378 *sizeret = -1;
379 }
380 return NULL;
381 }
382
383 long fsize = file_size(f);
384 if (sizeret) {
385 *sizeret = fsize;
386 }
387 char *ret;
388 if (fsize) {
389 //reserve an extra byte in case caller wants
390 //to null terminate the data
391 ret = malloc(fsize+1);
392 if (fread(ret, 1, fsize, f) != fsize) {
393 free(ret);
394 ret = NULL;
395 }
396 } else {
397 ret = NULL;
398 }
399 return ret;
400 }
401
402 char *get_config_dir()
403 {
404 static char* confdir;
405 if (!confdir) {
406 char *homedir = get_home_dir();
407 if (homedir) {
408 confdir = alloc_concat(homedir, "/.config/blastem");
409 }
410 }
411 return confdir;
412 }
413
414 #endif