forked from lix-project/lix
repl: log errors writing to history file
These errors are now logged and explicitly ignored, rather than
implicitly ignored.
Change-Id: Ia26015466a17f2b11952df5317a4d150d79dc184
This commit is contained in:
parent
992c63fc0b
commit
945b259fd9
|
@ -1,6 +1,8 @@
|
|||
#include <cstdio>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <cerrno>
|
||||
|
||||
#ifdef READLINE
|
||||
#include <readline/history.h>
|
||||
|
@ -176,15 +178,27 @@ bool ReadlineLikeInteracter::getLine(std::string & input, ReplPromptType promptT
|
|||
if (!s)
|
||||
return false;
|
||||
|
||||
write_history(historyFile.c_str());
|
||||
this->writeHistory();
|
||||
input += s;
|
||||
input += '\n';
|
||||
return true;
|
||||
}
|
||||
|
||||
void ReadlineLikeInteracter::writeHistory()
|
||||
{
|
||||
if (write_history(historyFile.c_str()) != 0) {
|
||||
// write_history returns the result of fclose() (which also flushes).
|
||||
// We should explicitly ignore these errors, but log them so the user
|
||||
// isn't confused why their history is getting eaten.
|
||||
int const fcloseErr = errno;
|
||||
std::string_view const errMsg(std::strerror(fcloseErr));
|
||||
warn("ignoring error writing repl history to %s: %s", this->historyFile, errMsg);
|
||||
}
|
||||
}
|
||||
|
||||
ReadlineLikeInteracter::~ReadlineLikeInteracter()
|
||||
{
|
||||
write_history(historyFile.c_str());
|
||||
this->writeHistory();
|
||||
}
|
||||
|
||||
AutomationInteracter::Guard AutomationInteracter::init(detail::ReplCompleterMixin *)
|
||||
|
|
|
@ -42,6 +42,7 @@ public:
|
|||
}
|
||||
virtual Guard init(detail::ReplCompleterMixin * repl) override;
|
||||
virtual bool getLine(std::string & input, ReplPromptType promptType) override;
|
||||
virtual void writeHistory();
|
||||
virtual ~ReadlineLikeInteracter() override;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue