Skip to content
Snippets Groups Projects
Commit 2a2f4b8e authored by D-AIRY's avatar D-AIRY
Browse files

Fixed console output handling p2

parent 8e02d479
Branches
Tags
1 merge request!6Version X.7.0
......@@ -55,10 +55,10 @@ protected:
virtual IBaseEventChannel *getEventChannelInternal(const XGUID &guid) = 0;
};
/*! Устанавливает поток вывода. Для работы консоли
\warning Должна быть инлайнова, чтобы выполняться в контексте вызывающей библиотеки
*/
__inline void Core_SetOutPtr(IXCore *pCore)
class CCoreOutPtr
{
friend void Core_SetOutPtr(IXCore *pCore);
CCoreOutPtr(IXCore *pCore)
{
UINT_PTR sock = pCore->getCrtOutputHandler();
if(sock == ~0)
......@@ -66,13 +66,33 @@ __inline void Core_SetOutPtr(IXCore *pCore)
return;
}
int hOut = _open_osfhandle(sock, O_RDONLY | O_RDWR | O_WRONLY | _O_APPEND);
FILE * fOut = ::_fdopen(hOut, "a+");
::setvbuf(fOut, NULL, _IONBF, 0);
m_fOut = ::_fdopen(_dup(hOut), "a+");
::setvbuf(m_fOut, NULL, _IONBF, 0);
m_fStdout = *stdout;
m_fStderr = *stderr;
*stdout = *m_fOut;
*stderr = *m_fOut;
}
~CCoreOutPtr()
{
*stdout = m_fStdout;
*stderr = m_fStderr;
fclose(m_fOut);
}
*stdout = *fOut;
*stderr = *fOut;
FILE *m_fOut;
FILE m_fStdout;
FILE m_fStderr;
};
fOut->_file = 1;
/*! Устанавливает поток вывода. Для работы консоли
\warning Должна быть инлайнова, чтобы выполняться в контексте вызывающей библиотеки
*/
__inline void Core_SetOutPtr(IXCore *pCore)
{
static CCoreOutPtr s_optr(pCore);
}
#define INIT_OUTPUT_STREAM(icore) Core_SetOutPtr(icore)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment