X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ffs%2Futils.cpp;h=2bfd1bf3ff4c63d9152084fe1ffdc0b802223aa5;hp=9a9802524399e53c8b21e723764f939a6fd9f8c1;hb=609c9a508cfdc7b42c46c4f21d17639204165a00;hpb=7264384ae4dc1adaf861750516030826a8c91645 diff --git a/source/fs/utils.cpp b/source/fs/utils.cpp index 9a98025..2bfd1bf 100644 --- a/source/fs/utils.cpp +++ b/source/fs/utils.cpp @@ -1,14 +1,5 @@ -#include -#ifdef WIN32 -#include -#else -#include -#endif -#include #include #include "dir.h" -#include "path.h" -#include "stat.h" #include "utils.h" using namespace std; @@ -78,79 +69,6 @@ Path fix_case(const Path &path) return result; } -Path readlink(const Path &link) -{ -#ifdef WIN32 - (void)link; - throw logic_error("no symbolic links on win32"); -#else - char buf[4096]; - int len = ::readlink(link.str().c_str(), buf, sizeof(buf)); - if(len==-1) - throw system_error("readlink"); - return string(buf, len); -#endif -} - -Path realpath(const Path &path) -{ -#ifdef WIN32 - if(path.is_absolute()) - return path; - else - return getcwd()/path; -#else - list queue(path.begin(), path.end()); - if(!path.is_absolute()) - { - Path cwd = getcwd(); - queue.insert(queue.begin(), cwd.begin(), cwd.end()); - } - - Path real; - unsigned n_links = 0; - while(!queue.empty()) - { - Path next = real/queue.front(); - queue.pop_front(); - - if(is_link(next)) - { - if(++n_links>64) - throw runtime_error("too many symbolic links"); - Path link = readlink(next); - queue.insert(queue.begin(), link.begin(), link.end()); - } - else - real = next; - } - - return real; -#endif -} - -void rename(const Path &from, const Path &to) -{ -#ifdef WIN32 - if(!MoveFileEx(from.c_str(), to.c_str(), MOVEFILE_REPLACE_EXISTING)) - throw system_error("MoveFileEx"); -#else - if(::rename(from.str().c_str(), to.str().c_str())==-1) - throw system_error("rename"); -#endif -} - -void unlink(const Path &path) -{ -#ifdef WIN32 - if(!DeleteFile(path.c_str())) - throw system_error("DeleteFile"); -#else - if(::unlink(path.str().c_str())==-1) - throw system_error("unlink"); -#endif -} - Path relative(const Path &path, const Path &base) { Path::Iterator i = path.begin();