Mercurial > hg > svcore
view system/Init.cpp @ 529:993e0a4f1343
* Try to avoid leaving output files open after completion
author | Chris Cannam |
---|---|
date | Tue, 20 Jan 2009 18:10:31 +0000 |
parents | 4884fba80e00 |
children | 29efe322ab47 |
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ /* Sonic Visualiser An audio file viewer and annotation editor. Centre for Digital Music, Queen Mary, University of London. This file copyright 2006 Chris Cannam. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. See the file COPYING included with this distribution for more information. */ #include <iostream> #ifdef Q_WS_X11 #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/Xatom.h> #include <X11/SM/SMlib.h> static int handle_x11_error(Display *dpy, XErrorEvent *err) { char errstr[256]; XGetErrorText(dpy, err->error_code, errstr, 256); if (err->error_code != BadWindow) { std::cerr << "Sonic Visualiser: X Error: " << errstr << " " << int(err->error_code) << "\nin major opcode: " << int(err->request_code) << std::endl; } return 0; } #endif #ifdef Q_WS_WIN32 #include <fcntl.h> #include <windows.h> // Set default file open mode to binary //#undef _fmode //int _fmode = _O_BINARY; void redirectStderr() { HANDLE stderrHandle = GetStdHandle(STD_ERROR_HANDLE); if (!stderrHandle) return; AllocConsole(); CONSOLE_SCREEN_BUFFER_INFO info; GetConsoleScreenBufferInfo(stderrHandle, &info); info.dwSize.Y = 1000; SetConsoleScreenBufferSize(stderrHandle, info.dwSize); int h = _open_osfhandle((long)stderrHandle, _O_TEXT); if (h) { FILE *fd = _fdopen(h, "w"); if (fd) { *stderr = *fd; setvbuf(stderr, NULL, _IONBF, 0); } } } #endif extern void svSystemSpecificInitialisation() { #ifdef Q_WS_X11 XSetErrorHandler(handle_x11_error); #endif #ifdef Q_WS_WIN32 redirectStderr(); #else #endif }