Add realpath variants of the commands that return paths.

Closes #1670.
This commit is contained in:
kunalkakade
2026-08-07 14:52:12 +05:30
committed by Jari Sundell
parent cfb9e083d2
commit 31196ff5f0
8 changed files with 209 additions and 0 deletions
+30
View File
@@ -3,6 +3,7 @@
#include "globals.h"
#include <cstdlib>
#include <stdlib.h>
#include <torrent/exceptions.h>
rpc::ip_table_list ip_tables;
@@ -28,3 +29,32 @@ expand_path(const std::string& path) {
return path;
}
// Resolves a path to a canonical one with no symlinks or relative components,
// so it can safely be handed to an external script. Returns an empty string if
// the path does not name an existing file or directory.
std::string
resolve_path(const std::string& path) {
if (path.empty())
return std::string();
char* resolved = ::realpath(expand_path(path).c_str(), nullptr);
if (resolved == nullptr)
return std::string();
std::string result(resolved);
std::free(resolved);
return result;
}
std::string
resolve_path_or_throw(const std::string& path) {
auto result = resolve_path(path);
if (result.empty())
throw torrent::input_error("Could not resolve path: '" + path + "'.");
return result;
}