@@ -34,6 +34,8 @@
|
34 | 34 | #include <string.h> |
35 | 35 | #include <unistd.h> |
36 | 36 | #include <limits.h> |
| 37 | +#include <sys/stat.h> |
| 38 | +#include <sys/types.h> |
37 | 39 | |
38 | 40 | #ifdef __PSP__ |
39 | 41 | #include <pspkernel.h> |
@@ -97,14 +99,32 @@ const SYSCHAR* System::getConfigFileName()
|
97 | 99 | return buffer; |
98 | 100 | #endif |
99 | 101 | char *home = getenv("HOME"); |
100 | | -if(home) |
| 102 | +if(!home) |
101 | 103 | { |
102 | | -strcpy(buffer, home); |
103 | | -strcat(buffer, "/.milkytracker_config"); |
| 104 | +// If $HOME isn't set, save in the current dir |
| 105 | +strncpy(buffer, "milkytracker_config", PATH_MAX); |
| 106 | +return buffer; |
104 | 107 | } |
| 108 | +// Old location was in the home directory |
| 109 | +char oldLoc[PATH_MAX]; |
| 110 | +strncpy(oldLoc, home, PATH_MAX); |
| 111 | +strncat(oldLoc, "/.milkytracker_config", PATH_MAX); |
| 112 | +// New location based on xdg basedir spec |
| 113 | +char *xdg_config_home = getenv("XDG_CONFIG_HOME"); |
| 114 | +if(xdg_config_home) |
| 115 | +strncpy(buffer, xdg_config_home, PATH_MAX); |
105 | 116 | else |
106 | | -strcpy(buffer, "milkytracker_config"); |
107 | | - |
| 117 | + { |
| 118 | +strncpy(buffer, home, PATH_MAX); |
| 119 | +strncat(buffer, "/.config", PATH_MAX); |
| 120 | + } |
| 121 | +mkdir(buffer, S_IRWXU); |
| 122 | +strncat(buffer, "/milkytracker", PATH_MAX); |
| 123 | +mkdir(buffer, S_IRWXU); |
| 124 | +strncat(buffer, "/config", PATH_MAX); |
| 125 | +// Move possible existing config into new location if not already present |
| 126 | +if(home && access(oldLoc, F_OK) == 0 && access(buffer, F_OK) != 0) |
| 127 | +rename(oldLoc, buffer); |
108 | 128 | return buffer; |
109 | 129 | } |
110 | 130 | |
|