https://bugs.winehq.org/show_bug.cgi?id=53935
--- Comment #7 from Ivan Permyakov info@vmpsoft.com ---
Ivan: would you mind submitting a patch including your modifications to undname.c ? tests are required especially with & without the UNDNAME_MS_KEYBOARD flag
static void append_ms_keyword(struct parsed_symbol *sym, const char **where, const char *str) { if (!(sym->flags & UNDNAME_NO_MS_KEYWORDS)) { if (sym->flags & UNDNAME_NO_LEADING_UNDERSCORES) str += 2; *where = *where ? str_printf(sym, "%s %s", *where, str) : str; } }
static void get_ext_modifier(struct parsed_symbol *sym, struct datatype_t *modifier) { modifier->left = modifier->right = NULL; for (;;) { switch (*sym->current) { case 'E': append_ms_keyword(sym, &modifier->right, "__ptr64"); break; case 'F': append_ms_keyword(sym, &modifier->left, "__unaligned"); break; case 'I': append_ms_keyword(sym, &modifier->right, "__restrict"); break; case 'G': { const char *mod = "&"; if (modifier->right) modifier->right = str_printf(sym, "%s %s", modifier->right, mod); else modifier->right = mod; } break; case 'H': { const char *mod = "&&"; if (modifier->right) modifier->right = str_printf(sym, "%s %s", modifier->right, mod); else modifier->right = mod; } break; default: return; } sym->current++; } }