annotate paths.c @ 2688:b42f00a3a937 default tip

Fix default target. Ensure m68k.h and z80.h are built before anything else when no dep info is available
author Michael Pavone <pavone@retrodev.com>
date Mon, 31 Mar 2025 21:06:18 -0700
parents c4256ce2c45a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <string.h>
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include <stdlib.h>
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3 #include "blastem.h"
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include "util.h"
2477
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
5 #include "config.h"
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
6 #include "paths.h"
2262
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
7 #ifdef _WIN32
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
8 #include <windows.h>
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
9 #else
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
10 #include <unistd.h>
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
11 #include <errno.h>
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
12 #endif
2681
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
13 #ifdef __ANDROID__
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
14 #include <SDL_system.h>
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
15 #include <jni.h>
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
16 #endif
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 static char **current_path;
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19
2477
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
20 static char *sticky_path_path(void)
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
21 {
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
22 if (is_config_in_exe_dir(config)) {
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
23 return path_append(get_exe_dir(), "sticky_path");
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
24 } else {
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
25 return path_append(get_config_dir(), "sticky_path");
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
26 }
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
27 }
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
28
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 static void persist_path(void)
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 {
2477
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
31 char *pathfname = sticky_path_path();
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32 FILE *f = fopen(pathfname, "wb");
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33 if (f) {
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 if (fwrite(*current_path, 1, strlen(*current_path), f) != strlen(*current_path)) {
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35 warning("Failed to save menu path");
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37 fclose(f);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38 } else {
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39 warning("Failed to save menu path: Could not open %s for writing\n", pathfname);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 free(pathfname);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
44
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45 #ifdef __ANDROID__
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 static char *get_external_storage_path()
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
47 {
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
48 static char *ret;
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
49 if (ret) {
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50 return ret;
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52 JNIEnv *env = SDL_AndroidGetJNIEnv();
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 if ((*env)->PushLocalFrame(env, 8) < 0) {
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 return NULL;
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 jclass Environment = (*env)->FindClass(env, "android/os/Environment");
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58 jmethodID getExternalStorageDirectory =
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59 (*env)->GetStaticMethodID(env, Environment, "getExternalStorageDirectory", "()Ljava/io/File;");
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60 jobject file = (*env)->CallStaticObjectMethod(env, Environment, getExternalStorageDirectory);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61 if (!file) {
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62 goto cleanup;
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
63 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
65 jmethodID getAbsolutePath = (*env)->GetMethodID(env, (*env)->GetObjectClass(env, file),
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
66 "getAbsolutePath", "()Ljava/lang/String;");
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
67 jstring path = (*env)->CallObjectMethod(env, file, getAbsolutePath);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
68
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
69 char const *tmp = (*env)->GetStringUTFChars(env, path, NULL);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
70 ret = strdup(tmp);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
71 (*env)->ReleaseStringUTFChars(env, path, tmp);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
72
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
73 cleanup:
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
74 (*env)->PopLocalFrame(env, NULL);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75 return ret;
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
76 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
77 #endif
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
78
2681
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
79 uint8_t get_initial_browse_path(char **dst)
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80 {
1858
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
81 char *base = NULL;
2681
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
82 #ifdef __ANDROID__
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
83 static const char activity_class_name[] = "com/retrodev/blastem/BlastEmActivity";
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
84 static const char get_rom_path_name[] = "getRomPath";
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
85 JNIEnv *env = SDL_AndroidGetJNIEnv();
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
86 jclass act_class = (*env)->FindClass(env, activity_class_name);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
87 if (!act_class) {
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
88 fatal_error("Failed to find activity class %s\n", activity_class_name);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
89 }
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
90 jmethodID meth = (*env)->GetMethodID(env, act_class, get_rom_path_name, "()Ljava/lang/String;");
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
91 if (!meth) {
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
92 fatal_error("Failed to find method %s\n", get_rom_path_name);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
93 }
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
94 jobject activity = SDL_AndroidGetActivity();
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
95 jobject ret = (*env)->CallObjectMethod(env, activity, meth);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
96 char *res = NULL;
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
97 if (ret) {
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
98 const char*utf = (*env)->GetStringUTFChars(env, (jstring)ret, NULL);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
99 jsize len = (*env)->GetStringUTFLength(env, (jstring)ret);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
100 res = calloc(len + 1, 1);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
101 memcpy(res, utf, len);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
102 debug_message("Got initial browse path: %s\n", res);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
103 (*env)->ReleaseStringUTFChars(env, (jstring)ret, utf);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
104 (*env)->DeleteLocalRef(env, ret);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
105 }
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
106
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
107 (*env)->DeleteLocalRef(env, activity);
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
108 if (res) {
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
109 *dst = res;
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
110 return 1;
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
111 }
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
112 return 0;
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
113 #else
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
114 char *remember_path = tern_find_path(config, "ui\0remember_path\0", TVAL_PTR).ptrval;
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
115 if (!remember_path || !strcmp("on", remember_path)) {
2477
2972a8e16ed2 Make sticky_path respect save config with EXE option
Michael Pavone <pavone@retrodev.com>
parents: 2262
diff changeset
116 char *pathfname = sticky_path_path();
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
117 FILE *f = fopen(pathfname, "rb");
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
118 if (f) {
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
119 long pathsize = file_size(f);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
120 if (pathsize > 0) {
1858
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
121 base = malloc(pathsize + 1);
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
122 if (fread(base, 1, pathsize, f) != pathsize) {
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
123 warning("Error restoring saved file browser path");
1858
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
124 free(base);
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
125 base = NULL;
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
126 } else {
1858
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
127 base[pathsize] = 0;
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
128 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
129 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
130 fclose(f);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
131 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
132 free(pathfname);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
133 if (!current_path) {
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
134 atexit(persist_path);
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
135 current_path = dst;
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
136 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
137 }
1858
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
138 if (!base) {
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
139 base = tern_find_path(config, "ui\0initial_path\0", TVAL_PTR).ptrval;
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
140 }
2681
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
141 #endif
1858
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
142 if (!base){
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
143 #ifdef __ANDROID__
2681
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
144
1858
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
145 base = get_external_storage_path();
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
146 #else
1858
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
147 base = "$HOME";
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
148 #endif
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
149 }
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
150 tern_node *vars = tern_insert_ptr(NULL, "HOME", get_home_dir());
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
151 vars = tern_insert_ptr(vars, "EXEDIR", get_exe_dir());
1858
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
152 *dst = replace_vars(base, vars, 1);
dda7479f3bbb Fix a couple of small memory leaks
Michael Pavone <pavone@retrodev.com>
parents: 1673
diff changeset
153 free(base);
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
154 tern_free(vars);
2681
c4256ce2c45a Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents: 2477
diff changeset
155 return 1;
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
156 }
1481
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
157
1489
637fbc3b5063 Added code to persist config back to a file
Michael Pavone <pavone@retrodev.com>
parents: 1481
diff changeset
158 char *path_append(const char *base, const char *suffix)
1481
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
159 {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
160 if (!strcmp(suffix, "..")) {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
161 #ifdef _WIN32
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
162 //handle transition from root of a drive to virtual root
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
163 if (base[1] == ':' && !base[2]) {
1524
b96f9fae757f Fix Windows build, added Windows default_font_path implementation
Michael Pavone <pavone@retrodev.com>
parents: 1489
diff changeset
164 return strdup(PATH_SEP);
1481
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
165 }
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
166 #endif
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
167 size_t len = strlen(base);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
168 while (len > 0) {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
169 --len;
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
170 if (is_path_sep(base[len])) {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
171 if (!len) {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
172 //special handling for /
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
173 len++;
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
174 }
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
175 char *ret = malloc(len+1);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
176 memcpy(ret, base, len);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
177 ret[len] = 0;
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
178 return ret;
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
179 }
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
180 }
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
181 return strdup(PATH_SEP);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
182 } else {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
183 #ifdef _WIN32
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
184 if (base[0] == PATH_SEP[0] && !base[1]) {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
185 //handle transition from virtual root to root of a drive
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
186 return strdup(suffix);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
187 }
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
188 #endif
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
189 if (is_path_sep(base[strlen(base) - 1])) {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
190 return alloc_concat(base, suffix);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
191 } else {
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
192 char const *pieces[] = {base, PATH_SEP, suffix};
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
193 return alloc_concat_m(3, pieces);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
194 }
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
195 }
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
196 }
2262
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
197
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
198 char *path_current_dir(void)
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
199 {
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
200 size_t size = 128;
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
201 char *res = malloc(size);
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
202 for (;;) {
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
203 #ifdef _WIN32
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
204 DWORD actual = GetCurrentDirectoryA(size, res);
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
205 if (actual > size) {
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
206 res = realloc(res, actual);
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
207 size = actual;
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
208 } else {
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
209 return res;
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
210 }
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
211 #else
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
212 errno = 0;
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
213 char *tmp = getcwd(res, size);
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
214 if (!tmp) {
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
215 if (errno == ERANGE) {
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
216 size *= 2;
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
217 res = realloc(res, size);
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
218 } else {
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
219 free(res);
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
220 return NULL;
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
221 }
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
222 } else {
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
223 return res;
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
224 }
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
225 #endif
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
226 }
bc68560b4a04 Fix bug when loading cue sheet without leading path
Michael Pavone <pavone@retrodev.com>
parents: 1858
diff changeset
227 }