Piotr Caban : msvcp90: Added support for exception reraising in ios_base:: clear.
Alexandre Julliard
julliard at winehq.org
Thu Mar 29 15:48:59 CDT 2012
Module: wine
Branch: master
Commit: 2f87a5d4590b5f601f63dd81146b6d07c6441deb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2f87a5d4590b5f601f63dd81146b6d07c6441deb
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Mar 29 16:13:13 2012 +0200
msvcp90: Added support for exception reraising in ios_base::clear.
---
dlls/msvcp90/exception.c | 2 ++
dlls/msvcp90/ios.c | 10 +++++-----
dlls/msvcp90/msvcp90.h | 1 +
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/dlls/msvcp90/exception.c b/dlls/msvcp90/exception.c
index 2c635ed..0965716 100644
--- a/dlls/msvcp90/exception.c
+++ b/dlls/msvcp90/exception.c
@@ -684,6 +684,8 @@ void throw_exception(exception_type et, const char *str)
const char *addr = str;
switch(et) {
+ case EXCEPTION_RERAISE:
+ _CxxThrowException(NULL, NULL);
case EXCEPTION: {
exception e;
MSVCP_exception_ctor(&e, &addr);
diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c
index 9a582eb..27703a0 100644
--- a/dlls/msvcp90/ios.c
+++ b/dlls/msvcp90/ios.c
@@ -1942,13 +1942,13 @@ void __thiscall ios_base_clear_reraise(ios_base *this, IOSB_iostate state, MSVCP
{
TRACE("(%p %x %x)\n", this, state, reraise);
- if(reraise) {
- FIXME("reraise is not supported\n");
+ this->state = state & IOSTATE_mask;
+ if(!(this->state & this->except))
return;
- }
- this->state = state & IOSTATE_mask;
- if(this->state & this->except & IOSTATE_eofbit)
+ if(reraise)
+ throw_exception(EXCEPTION_RERAISE, NULL);
+ else if(this->state & this->except & IOSTATE_eofbit)
throw_exception(EXCEPTION_FAILURE, "eofbit is set");
else if(this->state & this->except & IOSTATE_failbit)
throw_exception(EXCEPTION_FAILURE, "failbit is set");
diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h
index 8c3ceb5..c774e98 100644
--- a/dlls/msvcp90/msvcp90.h
+++ b/dlls/msvcp90/msvcp90.h
@@ -157,6 +157,7 @@ typedef struct __exception
/* Internal: throws selected exception */
typedef enum __exception_type {
+ EXCEPTION_RERAISE,
EXCEPTION,
EXCEPTION_BAD_ALLOC,
EXCEPTION_LOGIC_ERROR,
More information about the wine-cvs
mailing list