Mercurial > repos > blastem
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 |