From beadcf1f0d9cf8b9c0b14683bf40d27c142d33c5 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Fri, 9 Oct 2026 07:22:42 +0000 Subject: add history load/save --- src/history.cc | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'src/history.cc') diff --git a/src/history.cc b/src/history.cc index 3e976ce..4b3eba1 100644 --- a/src/history.cc +++ b/src/history.cc @@ -1,5 +1,15 @@ #include "history.h" +#include +#include +#include +#include +#include +#include +#include + +#include "util/io.h" + using namespace std; namespace ov4 @@ -19,5 +29,54 @@ size_t get_last_index() { return history_vec.size() - 1; } + +string get_default_history_path() +{ + return get_home_dir() + '/' + ".ccshell_history"; +} + +void load_history(const string &path) +{ + history_vec.clear(); + ifstream ifs(path); + if (!ifs.is_open()) + { + loggerln("load_history: fail to open history"); + return; + } + string tmp; + while (getline(ifs, tmp)) + { + history_vec.push_back(tmp); + } + return; +} + +void save_history(const string &path) +{ + int fd = open(path.c_str(), O_WRONLY | O_CREAT); + if (fd == -1) + { + loggerln("save_history: fail to open() history"); + return; + } + char f_mode = 'w'; + FILE *f = fdopen(fd, &f_mode); + if (f == nullptr) + { + loggerln("save_history: fail to fdopen() history"); + close(fd); + return; + } + + for (auto &c : history_vec) + { + println(f, "{}", c); + } + + fflush(f); + fsync(fd); + fclose(f); +} } -- cgit v1.3.1-4-g156e