diff options
author | Robin Gareus <robin@gareus.org> | 2014-11-08 21:01:49 +0100 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-12-16 18:31:18 -0500 |
commit | 0cf9eb2f0fd8afd9b58060e3cb064fa5836f66f1 (patch) | |
tree | 52d81fc7ec751cde03d496d8cd9035efc6d37f09 | |
parent | c136194b24c013977e95d53c62d712e721d21661 (diff) |
Gracefully handle init failure on Windows.
Conflicts:
pugl/pugl_win.cpp
-rw-r--r-- | pugl/pugl_win.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/pugl/pugl_win.cpp b/pugl/pugl_win.cpp index 204afaf..5956fdd 100644 --- a/pugl/pugl_win.cpp +++ b/pugl/pugl_win.cpp @@ -116,8 +116,14 @@ puglCreateWindow(PuglView* view, const char* title) impl->wc.hCursor = LoadCursor(NULL, IDC_ARROW); impl->wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); impl->wc.lpszMenuName = NULL; - impl->wc.lpszClassName = classNameBuf; - RegisterClass(&impl->wc); + impl->wc.lpszClassName = strdup(classNameBuf); + + if (!RegisterClass(&impl->wc)) { + free((void*)impl->wc.lpszClassName); + free(impl); + free(view); + return NULL; + } int winFlags = WS_POPUPWINDOW | WS_CAPTION; if (view->resizable) { @@ -136,6 +142,7 @@ puglCreateWindow(PuglView* view, const char* title) (HWND)view->parent, NULL, NULL, NULL); if (!impl->hwnd) { + free((void*)impl->wc.lpszClassName); free(impl); free(view); return 1; @@ -163,6 +170,15 @@ puglCreateWindow(PuglView* view, const char* title) SetPixelFormat(impl->hdc, format, &pfd); impl->hglrc = wglCreateContext(impl->hdc); + if (!impl->hglrc) { + ReleaseDC(impl->hwnd, impl->hdc); + DestroyWindow(impl->hwnd); + UnregisterClass(impl->wc.lpszClassName, NULL); + free((void*)impl->wc.lpszClassName); + free(impl); + free(view); + return NULL; + } wglMakeCurrent(impl->hdc, impl->hglrc); return 0; |