MCPcopy Create free account
hub / github.com/NetHack/NetHack / make_converted_name

Function make_converted_name

src/files.c:2089–2153  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2087#endif /* !SFCTOOL */
2088
2089staticfn boolean
2090make_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);

Callers 1

delete_convertedfileFunction · 0.85

Calls 6

contains_directoryFunction · 0.85
get_user_home_folderFunction · 0.85
eosFunction · 0.85
c_eosFunction · 0.85
nh_getenvFunction · 0.70
allocFunction · 0.70

Tested by

no test coverage detected