Expand '~/' to $HOME in session path.

This commit is contained in:
Jari Sundell
2026-01-06 12:44:40 +01:00
committed by GitHub
parent a8b6a47054
commit 289ab046bf
4 changed files with 29 additions and 3 deletions
+22
View File
@@ -2,6 +2,28 @@
#include "globals.h"
#include <torrent/exceptions.h>
rpc::ip_table_list ip_tables;
Control* control{};
std::string
expand_path(const std::string& path) {
if (path.empty())
return std::string();
if (path[0] == '~') {
if (path.size() < 2 || path[1] != '/')
throw torrent::input_error("Could not expand ~ in session path, only ~/<path> is supported.");
const char* home = std::getenv("HOME");
if (home == nullptr || *home == '\0')
throw torrent::input_error("Could not expand ~ in session path, HOME environment variable not set.");
return home + path.substr(1);
}
return path;
}
+2 -1
View File
@@ -8,8 +8,9 @@
class Control;
extern rpc::ip_table_list ip_tables;
extern Control* control;
extern Control* control;
std::string expand_path(const std::string& path);
namespace rpc {
class SCgi;
+4 -1
View File
@@ -3,6 +3,7 @@
#include "session/session_manager.h"
#include <cassert>
#include <cstdlib>
#include <torrent/exceptions.h>
#include <torrent/utils/log.h>
@@ -23,12 +24,14 @@ SessionManager::SessionManager(torrent::utils::Thread* thread)
SessionManager::~SessionManager() = default;
void
SessionManager::set_path(const std::string& path) {
SessionManager::set_path(std::string path) {
assert(torrent::this_thread::thread() == torrent::main_thread::thread());
if (m_freeze_info)
throw torrent::input_error("Session path cannot be changed after startup.");
path = expand_path(path);
if (path.empty() || path.back() == '/')
m_path = path;
else
+1 -1
View File
@@ -50,7 +50,7 @@ public:
bool is_used() const;
std::string path() const;
void set_path(const std::string& path);
void set_path(std::string path);
bool use_fsyncdisk() const;
void set_use_fsyncdisk(bool use_fsyncdisk);