| 2087 | #endif /* !SFCTOOL */ |
| 2088 | |
| 2089 | staticfn boolean |
| 2090 | make_converted_name(const char *filename) |
| 2091 | { |
| 2092 | unsigned ln; |
| 2093 | const char *xtra, *finaldirchar; |
| 2094 | const char *dir = NULL; |
| 2095 | boolean needsep = FALSE; |
| 2096 | #if defined(WIN32) |
| 2097 | static char folderbuf[MAX_PATH]; |
| 2098 | #endif |
| 2099 | |
| 2100 | if (!filename) |
| 2101 | return FALSE; |
| 2102 | |
| 2103 | if (unconverted_filename) |
| 2104 | free((genericptr_t) unconverted_filename), unconverted_filename = 0; |
| 2105 | if (converted_filename) |
| 2106 | free((genericptr_t) converted_filename), converted_filename = 0; |
| 2107 | |
| 2108 | #ifndef SHORT_FILENAMES |
| 2109 | /* do we need to do some ms-dos processing here? */ |
| 2110 | #endif /* SHORT_FILENAMES */ |
| 2111 | |
| 2112 | ln = (unsigned) strlen(filename); |
| 2113 | if (!contains_directory(filename)) { |
| 2114 | #if defined(UNIX) |
| 2115 | dir = nh_getenv("NETHACKDIR"); |
| 2116 | if (!dir) |
| 2117 | dir = nh_getenv("HACKDIR"); |
| 2118 | #ifdef HACKDIR |
| 2119 | if (!dir) |
| 2120 | dir = HACKDIR; |
| 2121 | #endif |
| 2122 | #elif defined(WIN32) |
| 2123 | if (get_user_home_folder(folderbuf, sizeof folderbuf)) { |
| 2124 | size_t sz = strlen(folderbuf); |
| 2125 | |
| 2126 | Snprintf(eos(folderbuf), sizeof folderbuf - sz, |
| 2127 | "\\AppData\\Local\\NetHack\\5.0\\"); |
| 2128 | dir = (const char *) folderbuf; |
| 2129 | } |
| 2130 | #endif /* UNIX || WIN32 */ |
| 2131 | if (dir) { |
| 2132 | finaldirchar = c_eos(dir); |
| 2133 | finaldirchar--; |
| 2134 | if (!(*finaldirchar == '/' || *finaldirchar == '\\' |
| 2135 | || *finaldirchar == ':')) { |
| 2136 | needsep = TRUE; |
| 2137 | ln += 1; |
| 2138 | } |
| 2139 | ln += strlen(dir); |
| 2140 | } |
| 2141 | } |
| 2142 | unconverted_filename = (char *) alloc(ln + 1); |
| 2143 | Snprintf(unconverted_filename, ln + 1, "%s%s%s", |
| 2144 | dir ? dir : "", |
| 2145 | (dir && needsep) ? "/" : "", |
| 2146 | filename); |
no test coverage detected