void I_ExpandHomeDir (std::string &path) { #ifdef UNIX if(!path.length()) return; if(path[0] != '~') return; std::string user; size_t slash_pos = path.find_first_of(PATHSEPCHAR); size_t end_pos = path.length(); if(slash_pos == std::string::npos) slash_pos = end_pos; if(path.length() != 1 && slash_pos != 1) user = path.substr(1, slash_pos - 1); if(slash_pos != end_pos) slash_pos++; path = I_GetHomeDir(user) + path.substr(slash_pos, end_pos - slash_pos); #endif }
std::string I_GetUserFileName (const char *file) { #if defined(UNIX) && !defined(GEKKO) // return absolute or explicitly relative pathnames unmodified, // so launchers or CLI/console users have control over netdemo placement if (file && (file[0] == PATHSEPCHAR || // /path/to/file (file[0] == '.' && file[1] == PATHSEPCHAR) || // ./file (file[0] == '.' && file[1] == '.' && file[2] == PATHSEPCHAR))) // ../file return std::string (file); std::string path = I_GetHomeDir(); if(path[path.length() - 1] != PATHSEPCHAR) path += PATHSEP; path += ".odamex"; struct stat info; if (stat (path.c_str(), &info) == -1) { if (mkdir (path.c_str(), S_IRUSR | S_IWUSR | S_IXUSR) == -1) { I_FatalError ("Failed to create %s directory:\n%s", path.c_str(), strerror (errno)); } } else { if (!S_ISDIR(info.st_mode)) { I_FatalError ("%s must be a directory", path.c_str()); } } path += PATHSEP; path += file; #elif defined(_XBOX) std::string path = "T:"; path += PATHSEP; path += file; #else if (!PathIsRelative(file)) return std::string (file); std::string path = I_GetBinaryDir(); if(path[path.length() - 1] != PATHSEPCHAR) path += PATHSEP; path += file; #endif FixPathSeparator(path); return path; }
std::string I_GetUserFileName (const char *file) { #if defined(UNIX) && !defined(GEKKO) std::string path = I_GetHomeDir(); if(path[path.length() - 1] != PATHSEPCHAR) path += PATHSEP; path += ".odamex"; struct stat info; if (stat (path.c_str(), &info) == -1) { if (mkdir (path.c_str(), S_IRUSR | S_IWUSR | S_IXUSR) == -1) { I_FatalError ("Failed to create %s directory:\n%s", path.c_str(), strerror (errno)); } } else { if (!S_ISDIR(info.st_mode)) { I_FatalError ("%s must be a directory", path.c_str()); } } path += PATHSEP; path += file; #elif defined(_XBOX) std::string path = "T:"; path += PATHSEP; path += file; #else std::string path = I_GetBinaryDir(); if(path[path.length() - 1] != PATHSEPCHAR) path += PATHSEP; path += file; #endif FixPathSeparator(path); return path; }
std::string I_GetUserFileName (const char *file) { #ifdef UNIX std::string path = I_GetHomeDir(); if(path[path.length() - 1] != '/') path += "/"; path += ".odamex"; struct stat info; if (stat (path.c_str(), &info) == -1) { if (mkdir (path.c_str(), S_IRUSR | S_IWUSR | S_IXUSR) == -1) { I_FatalError ("Failed to create %s directory:\n%s", path.c_str(), strerror (errno)); } } else { if (!S_ISDIR(info.st_mode)) { I_FatalError ("%s must be a directory", path.c_str()); } } path += "/"; path += file; #endif #ifdef WIN32 std::string path = I_GetBinaryDir(); if(path[path.length() - 1] != '/') path += "/"; path += file; #endif return path; }