always restore old cerr buffer at exit
This commit is contained in:
@@ -80,6 +80,22 @@ bool Global::BlockItemListUpdate = 0;
|
|||||||
bool Global::MessagesAllowed = 0;
|
bool Global::MessagesAllowed = 0;
|
||||||
bool Global::RedrawHeader = 1;
|
bool Global::RedrawHeader = 1;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
std::ofstream errorlog;
|
||||||
|
std::streambuf *cerr_buffer;
|
||||||
|
|
||||||
|
void do_at_exit()
|
||||||
|
{
|
||||||
|
// restore old cerr buffer
|
||||||
|
std::cerr.rdbuf(cerr_buffer);
|
||||||
|
errorlog.close();
|
||||||
|
Mpd.Disconnect();
|
||||||
|
DestroyScreen();
|
||||||
|
WindowTitle("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
CreateConfigDir();
|
CreateConfigDir();
|
||||||
@@ -106,9 +122,12 @@ int main(int argc, char *argv[])
|
|||||||
if (!ConnectToMPD())
|
if (!ConnectToMPD())
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
// always execute these commands, even if ncmpcpp use exit function
|
||||||
|
atexit(do_at_exit);
|
||||||
|
|
||||||
// redirect std::cerr output to ~/.ncmpcpp/error.log file
|
// redirect std::cerr output to ~/.ncmpcpp/error.log file
|
||||||
std::ofstream errorlog((config_dir + "error.log").c_str(), std::ios::app);
|
errorlog.open((config_dir + "error.log").c_str(), std::ios::app);
|
||||||
std::streambuf *cerr_buffer = std::cerr.rdbuf();
|
cerr_buffer = std::cerr.rdbuf();
|
||||||
std::cerr.rdbuf(errorlog.rdbuf());
|
std::cerr.rdbuf(errorlog.rdbuf());
|
||||||
|
|
||||||
InitScreen("ncmpc++ ver. "VERSION, Config.colors_enabled);
|
InitScreen("ncmpc++ ver. "VERSION, Config.colors_enabled);
|
||||||
@@ -1996,12 +2015,6 @@ int main(int argc, char *argv[])
|
|||||||
# endif // ENABLE_CLOCK
|
# endif // ENABLE_CLOCK
|
||||||
// key mapping end
|
// key mapping end
|
||||||
}
|
}
|
||||||
// restore old cerr buffer
|
|
||||||
std::cerr.rdbuf(cerr_buffer);
|
|
||||||
errorlog.close();
|
|
||||||
Mpd.Disconnect();
|
|
||||||
DestroyScreen();
|
|
||||||
WindowTitle("");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user