Commit 64200646 authored by Ramon Nou's avatar Ramon Nou
Browse files

WIP rename + symlink

parent d14bac97
Loading
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -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))) {
@@ -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)) {
@@ -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;