From: Rémi Bernon rbernon@codeweavers.com
--- tools/widl/parser.y | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/widl/parser.y b/tools/widl/parser.y index 44c9447e3a4..bd32b739163 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -596,8 +596,8 @@ marshaling_behavior: ;
contract_ver: - aNUM { $$ = make_version( 0, $1.value ); } - | aNUM '.' aNUM { $$ = make_version( $3.value, $1.value ); } + aNUM { $$ = make_version( $1.value, 0 ); } + | aNUM '.' aNUM { $$ = make_version( $1.value, $3.value ); } ;
contract_req
From: Rémi Bernon rbernon@codeweavers.com
--- tools/widl/header.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/tools/widl/header.c b/tools/widl/header.c index b993286a85c..0f09786a225 100644 --- a/tools/widl/header.c +++ b/tools/widl/header.c @@ -1835,15 +1835,17 @@ static void write_coclass_forward(FILE *header, type_t *cocl) fprintf(header, "#endif /* defined __%s_FWD_DEFINED__ */\n\n", cocl->name ); }
-static void write_apicontract(FILE *header, type_t *apicontract) +static void write_apicontract( FILE *header, type_t *apicontract ) { + const version_t *version; char *name; if (apicontract->written) return; name = format_apicontract_macro( apicontract ); - fprintf(header, "#if !defined(%s_VERSION)\n", name); - fprintf(header, "#define %s_VERSION %#x\n", name, get_attrv(apicontract->attrs, ATTR_CONTRACTVERSION)); - fprintf(header, "#endif // defined(%s_VERSION)\n\n", name); - free(name); + version = get_attrp( apicontract->attrs, ATTR_CONTRACTVERSION ); + fprintf( header, "#if !defined(%s_VERSION)\n", name ); + fprintf( header, "#define %s_VERSION %#x\n", name, (version->major << 16 | version->minor) ); + fprintf( header, "#endif // defined(%s_VERSION)\n\n", name ); + free( name ); apicontract->written = true; }
From: Rémi Bernon rbernon@codeweavers.com
--- tools/widl/metadata.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/tools/widl/metadata.c b/tools/widl/metadata.c index 15cd09bd494..63a05789555 100644 --- a/tools/widl/metadata.c +++ b/tools/widl/metadata.c @@ -2618,18 +2618,6 @@ static void add_interface_type_step2( type_t *type ) add_exclusiveto_attr_step2( type ); }
-static UINT make_contractversion_value( const attr_t *attr, BYTE *buf ) -{ - UINT version = attr ? attr->u.ival : 0, len = 2 + sizeof(version); - - buf[0] = 1; - buf[1] = 0; - memcpy( buf + 2, &version, sizeof(version) ); - buf[len++] = 0; - buf[len++] = 0; - return len; -} - static void add_contractversion_attr_step1( const type_t *type ) { static const BYTE sig[] = { SIG_TYPE_HASTHIS, 1, ELEMENT_TYPE_VOID, ELEMENT_TYPE_U4 }; @@ -2656,7 +2644,7 @@ static void add_contractversion_attr_step2( const type_t *type )
parent = has_customattribute( TABLE_TYPEDEF, type->md.def ); attr_type = customattribute_type( TABLE_MEMBERREF, attr->md_member ); - value_size = make_contractversion_value( attr, value ); + value_size = make_version_value( attr, value ); add_customattribute_row( parent, attr_type, add_blob(value, value_size) ); }
From: Rémi Bernon rbernon@codeweavers.com
--- tools/widl/metadata.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/tools/widl/metadata.c b/tools/widl/metadata.c index 63a05789555..ec2d2136f16 100644 --- a/tools/widl/metadata.c +++ b/tools/widl/metadata.c @@ -2171,7 +2171,7 @@ static UINT make_deprecated_value( const attr_t *attr, BYTE **ret_buf ) const char *text = expr->ref->u.sval; const char *kind = expr->u.ext->u.sval; BYTE encoded[4]; - UINT len, len_text = strlen( text ), len_encoded = encode_int( len_text, encoded ); + UINT len, version, len_text = strlen( text ), len_encoded = encode_int( len_text, encoded ); BYTE *buf = xmalloc( 2 + len_encoded + len_text + 6 + MAX_NAME + 5 ); char *contract;
@@ -2184,11 +2184,11 @@ static UINT make_deprecated_value( const attr_t *attr, BYTE **ret_buf ) if (!strcmp( kind, "remove" )) memcpy( buf + len, one, sizeof(one) ); else memcpy( buf + len, zero, sizeof(zero) ); len += 4; - buf[len++] = 0; - buf[len++] = 0;
- buf[len++] = 1; - buf[len++] = 0; + version = expr->ext2->ref->u.integer.value; + memcpy( buf + len, &version, sizeof(version) ); + len += sizeof(version); + contract = format_namespace( type->namespace, "", ".", type->name, NULL ); len_text = strlen( contract ); buf[len++] = len_text;
This merge request was approved by Huw Davies.