Adding Spectre/System/Log/FileWriter class.
This commit is contained in:
parent
173aea31c9
commit
8db01a0957
3 changed files with 97 additions and 0 deletions
66
source/System/Log/FileWriter.cpp
Normal file
66
source/System/Log/FileWriter.cpp
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
|
||||
#include <Spectre/System/Log/FileWriter.h>
|
||||
|
||||
namespace sp { namespace log {
|
||||
|
||||
FileWriter::FileWriter(const std::string file) :
|
||||
m_fd (NULL)
|
||||
{
|
||||
if (file.length() > 0) {
|
||||
open(file);
|
||||
}
|
||||
}
|
||||
|
||||
FileWriter::~FileWriter()
|
||||
{
|
||||
if (m_fd) {
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
bool FileWriter::open(const std::string file)
|
||||
{
|
||||
if (!close()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (file == "stderr") {
|
||||
m_fd = stderr;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (file == "stdout") {
|
||||
m_fd = stdout;
|
||||
return true;
|
||||
}
|
||||
|
||||
m_fd = fopen(file.c_str(), "a");
|
||||
if (m_fd == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FileWriter::close()
|
||||
{
|
||||
if (m_fd) {
|
||||
// stdout and stderr can not be closed.
|
||||
if (m_fd == stdout || m_fd == stderr) {
|
||||
m_fd = NULL;
|
||||
return true;
|
||||
}
|
||||
if (fclose(m_fd) < 0) {
|
||||
return false;
|
||||
}
|
||||
m_fd = NULL;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
size_t FileWriter::write(const void *data, size_t len)
|
||||
{
|
||||
return fwrite(data, 1, len, m_fd);
|
||||
}
|
||||
|
||||
} } // sp::log
|
||||
Loading…
Add table
Add a link
Reference in a new issue