Loading src/client/gkfs_functions.cpp +22 −1 Original line number Diff line number Diff line Loading @@ -1678,6 +1678,7 @@ gkfs_mk_symlink(const std::string& path, const std::string& target_path) { * So that application know we don't support link to directory. */ auto target_md = gkfs::utils::get_metadata(target_path, false); std::string new_path = target_path; if(target_md) { auto trg_mode = target_md->mode(); if(!(S_ISREG(trg_mode) || S_ISLNK(trg_mode))) { Loading @@ -1686,6 +1687,26 @@ gkfs_mk_symlink(const std::string& path, const std::string& target_path) { errno = ENOTSUP; return -1; } // Check for renamed files if(target_md->blocks() == -1) { // This is an old file that was renamed and essentially no longer // exists errno = ENOENT; return -1; } else { if(!target_md->is_link()) { if(!target_md.value().target_path().empty()) { auto md_ = gkfs::utils::get_metadata( target_md.value().target_path()); new_path = target_md.value().target_path(); if(!md_) { return -1; } } } } } if(check_parent_dir(path)) { Loading @@ -1707,7 +1728,7 @@ gkfs_mk_symlink(const std::string& path, const std::string& target_path) { return -1; } auto err = gkfs::rpc::forward_mk_symlink(path, target_path); auto err = gkfs::rpc::forward_mk_symlink(path, new_path); if(err) { errno = err; return -1; Loading Loading
src/client/gkfs_functions.cpp +22 −1 Original line number Diff line number Diff line Loading @@ -1678,6 +1678,7 @@ gkfs_mk_symlink(const std::string& path, const std::string& target_path) { * So that application know we don't support link to directory. */ auto target_md = gkfs::utils::get_metadata(target_path, false); std::string new_path = target_path; if(target_md) { auto trg_mode = target_md->mode(); if(!(S_ISREG(trg_mode) || S_ISLNK(trg_mode))) { Loading @@ -1686,6 +1687,26 @@ gkfs_mk_symlink(const std::string& path, const std::string& target_path) { errno = ENOTSUP; return -1; } // Check for renamed files if(target_md->blocks() == -1) { // This is an old file that was renamed and essentially no longer // exists errno = ENOENT; return -1; } else { if(!target_md->is_link()) { if(!target_md.value().target_path().empty()) { auto md_ = gkfs::utils::get_metadata( target_md.value().target_path()); new_path = target_md.value().target_path(); if(!md_) { return -1; } } } } } if(check_parent_dir(path)) { Loading @@ -1707,7 +1728,7 @@ gkfs_mk_symlink(const std::string& path, const std::string& target_path) { return -1; } auto err = gkfs::rpc::forward_mk_symlink(path, target_path); auto err = gkfs::rpc::forward_mk_symlink(path, new_path); if(err) { errno = err; return -1; Loading