38 #include <sys/types.h>
59 TGRedirectOutputGuard::TGRedirectOutputGuard(TGTextView *tv,
69 fLogFile =
"RedirOutputGuard_";
70 fLogFileRead = gSystem->TempFileName(fLogFile);
72 Error(
"TGRedirectOutputGuard",
"could create temp file");
81 if (!gSystem->AccessPathName(flog, kFileExists)) {
82 if (gSystem->AccessPathName(flog,
83 (EAccessMode)(kWritePermission | kReadPermission))) {
84 Error(
"TGRedirectOutputGuard",
85 "no write or read permission on file: %s", flog);
92 const char *m = (mode[0] !=
'a' && mode[0] !=
'w') ?
"a" : mode;
93 if (gSystem->RedirectOutput(fLogFile.Data(), m) == -1) {
94 Error(
"TGRedirectOutputGuard",
"could not redirect output");
99 if ((fLogFileRead = fopen(fLogFile.Data(),
"r"))) {
101 lseek(fileno(fLogFileRead),(off_t)0, SEEK_END);
103 Error(
"TGRedirectOutputGuard",
"could not open file in read mode");
113 TGRedirectOutputGuard::~TGRedirectOutputGuard()
120 fclose(fLogFileRead);
123 if (fTmpFile && fLogFile.Length() > 0)
124 gSystem->Unlink(fLogFile);
127 gSystem->RedirectOutput(0);
133 void TGRedirectOutputGuard::Update()
136 Warning(
"Update",
"no TGTextView defined");
141 Warning(
"Update",
"no file open for reading");
149 while (fgets(line,
sizeof(line),fLogFileRead)) {
152 if (line[strlen(line)-1] ==
'\n')
153 line[strlen(line)-1] = 0;
156 fTextView->AddLine(line);