r22176 by jghali -
scribus-commit
scribus-commit at lists.scribus.net
Mon Oct 2 18:31:30 UTC 2017
Author: jghali
Date: Mon Oct 2 18:31:29 2017
New Revision: 22176
URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22176
Log:
#15005: Windows version crashes in "Console" mode
Modified:
trunk/Scribus/scribus/main_win32.cpp
trunk/Scribus/scribus/scribus.cpp
Modified: trunk/Scribus/scribus/main_win32.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=22176&path=/trunk/Scribus/scribus/main_win32.cpp
==============================================================================
--- trunk/Scribus/scribus/main_win32.cpp (original)
+++ trunk/Scribus/scribus/main_win32.cpp Mon Oct 2 18:31:29 2017
@@ -90,6 +90,7 @@
{
int result;
emergencyActivated = false;
+
#if !defined(_CONSOLE)
if (consoleOptionEnabled(argc, argv))
{
@@ -103,6 +104,7 @@
ScribusQApp app(argc, argv);
setPythonEnvironment(app.applicationDirPath());
result = mainApp(app);
+
return result;
}
@@ -313,22 +315,22 @@
switch (type)
{
case QtDebugMsg:
- cerr << "Debug: " << localMsg.constData()
- << "(" << context.file << ":" << context.line << ", "
- << context.function << ")"
- << endl;
+ cerr << "Debug: " << localMsg.constData();
+ if (context.file && context.function)
+ cerr << "(" << context.file << ":" << context.line << ", " << context.function << ")";
+ cerr << endl;
break;
case QtWarningMsg:
- cerr << "Warning: " << localMsg.constData()
- << "(" << context.file << ":" << context.line << ", "
- << context.function << ")"
- << endl;
+ cerr << "Warning: " << localMsg.constData();
+ if (context.file && context.function)
+ cerr << "(" << context.file << ":" << context.line << ", " << context.function << ")";
+ cerr << endl;
break;
case QtCriticalMsg:
- cerr << "Critical: " << localMsg.constData()
- << "(" << context.file << ":" << context.line << ", "
- << context.function << ")"
- << endl;
+ cerr << "Critical: " << localMsg.constData();
+ if (context.file && context.function)
+ cerr << "(" << context.file << ":" << context.line << ", " << context.function << ")";
+ cerr << endl;
break;
case QtFatalMsg:
if (ScribusQApp::useGUI)
@@ -364,33 +366,69 @@
int hConHandle;
HANDLE lStdHandle;
CONSOLE_SCREEN_BUFFER_INFO coninfo;
- FILE *fp;
+
+ freopen("NUL", "r", stdin);
+ freopen("NUL", "w", stdout);
+ freopen("NUL", "w", stderr);
// allocate console
if( GetStdHandle(STD_OUTPUT_HANDLE) != INVALID_HANDLE_VALUE )
AllocConsole();
+
// set the screen buffer to be big enough to let us scroll text
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
coninfo.dwSize.Y = MAX_LINES;
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
+
+ // redirect unbuffered STDIN to the console
+ lStdHandle = GetStdHandle(STD_INPUT_HANDLE);
+ if (lStdHandle != INVALID_HANDLE_VALUE)
+ {
+ hConHandle = _open_osfhandle((intptr_t) lStdHandle, _O_TEXT);
+ if (hConHandle != -1)
+ {
+ _dup2(hConHandle, fileno(stdin));
+ setvbuf(stdin, NULL, _IONBF, 0);
+ SetStdHandle(STD_INPUT_HANDLE, (HANDLE) _get_osfhandle(fileno(stdin)));
+ _close(hConHandle);
+ }
+ }
+
//redirect unbuffered STDOUT to the console
lStdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
- hConHandle = _open_osfhandle((intptr_t) lStdHandle, _O_TEXT);
- fp = _fdopen( hConHandle, "w" );
- *stdout = *fp;
- setvbuf( stdout, NULL, _IONBF, 0 );
- // redirect unbuffered STDIN to the console
- lStdHandle = GetStdHandle(STD_INPUT_HANDLE);
- hConHandle = _open_osfhandle((intptr_t) lStdHandle, _O_TEXT);
- fp = _fdopen( hConHandle, "r" );
- *stdin = *fp;
- setvbuf( stdin, NULL, _IONBF, 0 );
+ if (lStdHandle != INVALID_HANDLE_VALUE)
+ {
+ hConHandle = _open_osfhandle((intptr_t) lStdHandle, _O_TEXT);
+ if (hConHandle != -1)
+ {
+ _dup2(hConHandle, fileno(stdout));
+ setvbuf(stdout, NULL, _IONBF, 0);
+ SetStdHandle(STD_OUTPUT_HANDLE, (HANDLE) _get_osfhandle(fileno(stdout)));
+ _close(hConHandle);
+ }
+ }
+
// redirect unbuffered STDERR to the console
lStdHandle = GetStdHandle(STD_ERROR_HANDLE);
- hConHandle = _open_osfhandle((intptr_t) lStdHandle, _O_TEXT);
- fp = _fdopen( hConHandle, "w" );
- *stderr = *fp;
- setvbuf( stderr, NULL, _IONBF, 0 );
+ if (lStdHandle != INVALID_HANDLE_VALUE)
+ {
+ hConHandle = _open_osfhandle((intptr_t) lStdHandle, _O_TEXT);
+ if (hConHandle != -1)
+ {
+ _dup2(hConHandle, fileno(stderr));
+ setvbuf(stderr, NULL, _IONBF, 0);
+ SetStdHandle(STD_ERROR_HANDLE, (HANDLE) _get_osfhandle(fileno(stderr)));
+ _close(hConHandle);
+ }
+ }
+
+ std::wcout.clear();
+ std::cout.clear();
+ std::wcerr.clear();
+ std::cerr.clear();
+ std::wcin.clear();
+ std::cin.clear();
+
// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
// point to console as well
ios::sync_with_stdio();
Modified: trunk/Scribus/scribus/scribus.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=22176&path=/trunk/Scribus/scribus/scribus.cpp
==============================================================================
--- trunk/Scribus/scribus/scribus.cpp (original)
+++ trunk/Scribus/scribus/scribus.cpp Mon Oct 2 18:31:29 2017
@@ -8417,7 +8417,7 @@
void ScribusMainWindow::emergencySave()
{
emergencyActivated=true;
- if (!m_prefsManager->appPrefs.miscPrefs.saveEmergencyFile)
+ if (!m_prefsManager || !m_prefsManager->appPrefs.miscPrefs.saveEmergencyFile)
return;
std::cout << "Calling Emergency Save" << std::endl;
QList<QMdiSubWindow *> windows = mdiArea->subWindowList();
More information about the scribus-commit
mailing list