X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ffile_system.cpp;h=be39082e7d0c9bd2e93a0aca2417c2a3ddc94cf2;hb=3d0fc88a41d3774bbbcaee76efdb996bbacc6c45;hp=cb8f426d9cc93e898e6b9f5a1049d302608b1b2f;hpb=ef146ea92ea53c84903cc5ba624520fb7b288522;p=supertux.git diff --git a/src/file_system.cpp b/src/file_system.cpp index cb8f426d9..be39082e7 100644 --- a/src/file_system.cpp +++ b/src/file_system.cpp @@ -32,9 +32,11 @@ namespace FileSystem std::string dirname(const std::string& filename) { std::string::size_type p = filename.find_last_of('/'); - if(p == std::string::npos) - return ""; - + if(p == std::string::npos) + p = filename.find_last_of('\\'); + if(p == std::string::npos) + return "./"; + return filename.substr(0, p+1); } @@ -42,6 +44,8 @@ std::string basename(const std::string& filename) { std::string::size_type p = filename.find_last_of('/'); if(p == std::string::npos) + p = filename.find_last_of('\\'); + if(p == std::string::npos) return filename; return filename.substr(p+1, filename.size()-p-1); @@ -63,29 +67,29 @@ std::string normalize(const std::string& filename) const char* p = filename.c_str(); while(true) { - while(*p == '/') { + while(*p == '/' || *p == '\\') { p++; continue; } const char* pstart = p; - while(*p != '/' && *p != 0) { + while(*p != '/' && *p != '\\' && *p != 0) { ++p; } size_t len = p - pstart; if(len == 0) break; - + std::string pathelem(pstart, p-pstart); if(pathelem == ".") continue; - + if(pathelem == "..") { if(path_stack.empty()) { log_warning << "Invalid '..' in path '" << filename << "'" << std::endl; - // push it into the result path so that the users sees his error... + // push it into the result path so that the user sees his error... path_stack.push_back(pathelem); } else { path_stack.pop_back(); @@ -108,4 +112,3 @@ std::string normalize(const std::string& filename) } } -