Module: wine Branch: refs/heads/master Commit: 0df8b0a0209f9f99bce5d001e56937af9e2c82d0 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=0df8b0a0209f9f99bce5d001...
Author: Michael Stefaniuc mstefani@redhat.de Date: Tue Feb 7 12:27:35 2006 +0100
msvcrt: Handle data types B,R,S in C++ symbol demangling.
---
dlls/msvcrt/undname.c | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/dlls/msvcrt/undname.c b/dlls/msvcrt/undname.c index 222ce7e..5c2f47f 100644 --- a/dlls/msvcrt/undname.c +++ b/dlls/msvcrt/undname.c @@ -374,8 +374,11 @@ static const char* get_modified_type(str switch (modif) { case 'A': str_modif = " &"; break; + case 'B': str_modif = " & volatile"; break; case 'P': str_modif = " *"; break; case 'Q': str_modif = " * const"; break; + case 'R': str_modif = " * volatile"; break; + case 'S': str_modif = " * const volatile"; break; case '?': str_modif = ""; break; default: return NULL; } @@ -645,11 +648,14 @@ static BOOL demangle_datatype(struct par /* not all the time is seems */ if (!(ct->left = get_modified_type(sym, '?'))) goto done; break; - case 'A': - if (!(ct->left = get_modified_type(sym, 'A'))) goto done; - break; - case 'Q': - if (!(ct->left = get_modified_type(sym, in_args ? 'Q' : 'P'))) goto done; + case 'A': /* reference */ + case 'B': /* volatile reference */ + if (!(ct->left = get_modified_type(sym, dt))) goto done; + break; + case 'Q': /* const pointer */ + case 'R': /* volatile pointer */ + case 'S': /* const volatile pointer */ + if (!(ct->left = get_modified_type(sym, in_args ? dt : 'P'))) goto done; break; case 'P': /* Pointer */ if (isdigit(*sym->current))