#include #include #include #include #include #include #include #include "Output.h" #include "Exceptions.h" #ifdef HAVE_CONFIG_H #include "config.h" #else #define _(x) x #endif Output::Output(String no, int trunc) throw (GeneralException) : Handle(no.strlen() ? open(no.to_charp(), O_WRONLY | O_CREAT | (trunc ? O_TRUNC : O_APPEND), 00666) : dup(1)), n(no) { if (GetHandle() < 0) { throw IOGeneral(String(_("Error opening file ")) + no + _(" for writing: ") + strerror(errno)); } size = lseek(GetHandle(), 0, SEEK_END); lseek(GetHandle(), 0, SEEK_SET); struct stat s; fstat(GetHandle(), &s); date_modif = s.st_mtime; } Output::Output(const Output & o) : Handle(o), n(o.n) { } bool Output::CanWrite() { return 1; } bool Output::CanRead() { return 0; } bool Output::CanSeek() { struct stat s; fstat(GetHandle(), &s); return S_ISREG(s.st_mode); } String Output::GetName() { return n; } Stdout_t::Stdout_t() {} bool Stdout_t::CanSeek() { return 0; } String Stdout_t::GetName() { return "Stdout"; } Stderr_t::Stderr_t() : Handle(dup(2)) {} bool Stderr_t::CanWrite() { return 1; } bool Stderr_t::CanRead() { return 0; } bool Stderr_t::CanSeek() { return 0; } String Stderr_t::GetName() { return "Stderr"; } Stdout_t Stdout; Stderr_t Stderr;