[PATCH v2 1/4] widl: Add abi_prefix parameter to format_namespace.
Rémi Bernon
rbernon at codeweavers.com
Tue Dec 1 08:01:54 CST 2020
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
v2: Just add the explicit abi_prefix parameter, we don't really need
the buffer management for now. I'll add a strappend helper in some
future series.
Supersedes: 196372-196375
tools/widl/header.c | 2 +-
tools/widl/parser.y | 2 +-
tools/widl/typetree.c | 18 +++++++++---------
tools/widl/widltypes.h | 3 ++-
4 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/tools/widl/header.c b/tools/widl/header.c
index 015bbe2ece7..a892243fb54 100644
--- a/tools/widl/header.c
+++ b/tools/widl/header.c
@@ -132,7 +132,7 @@ static void write_guid(FILE *f, const char *guid_prefix, const char *name, const
static void write_uuid_decl(FILE *f, type_t *type, const UUID *uuid)
{
- char *name = format_namespace(type->namespace, "", "::", type->name);
+ char *name = format_namespace(type->namespace, "", "::", type->name, use_abi_namespace ? "ABI" : NULL);
fprintf(f, "#ifdef __CRT_UUID_DECL\n");
fprintf(f, "__CRT_UUID_DECL(%s, 0x%08x, 0x%04x, 0x%04x, 0x%02x,0x%02x, 0x%02x,"
"0x%02x,0x%02x,0x%02x,0x%02x,0x%02x)\n",
diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index 160e4029a6e..1bbb2e78f7e 100644
--- a/tools/widl/parser.y
+++ b/tools/widl/parser.y
@@ -1922,7 +1922,7 @@ type_t *reg_type(type_t *type, const char *name, struct namespace *namespace, in
if (is_global_namespace(namespace))
type->c_name = name;
else
- type->c_name = format_namespace(namespace, "__x_", "_C", name);
+ type->c_name = format_namespace(namespace, "__x_", "_C", name, use_abi_namespace ? "ABI" : NULL);
nt->type = type;
nt->t = t;
nt->next = namespace->type_hash[hash];
diff --git a/tools/widl/typetree.c b/tools/widl/typetree.c
index c0547b36a96..df883576915 100644
--- a/tools/widl/typetree.c
+++ b/tools/widl/typetree.c
@@ -89,38 +89,38 @@ const char *type_get_name(const type_t *type, enum name_type name_type)
return NULL;
}
-static char *append_namespace(char *ptr, struct namespace *namespace, const char *separator)
+static char *append_namespace(char *ptr, struct namespace *namespace, const char *separator, const char *abi_prefix)
{
if(is_global_namespace(namespace)) {
- if(!use_abi_namespace)
- return ptr;
- strcpy(ptr, "ABI");
+ if(!abi_prefix) return ptr;
+ strcpy(ptr, abi_prefix);
strcat(ptr, separator);
return ptr + strlen(ptr);
}
- ptr = append_namespace(ptr, namespace->parent, separator);
+ ptr = append_namespace(ptr, namespace->parent, separator, abi_prefix);
strcpy(ptr, namespace->name);
strcat(ptr, separator);
return ptr + strlen(ptr);
}
-char *format_namespace(struct namespace *namespace, const char *prefix, const char *separator, const char *suffix)
+char *format_namespace(struct namespace *namespace, const char *prefix, const char *separator, const char *suffix,
+ const char *abi_prefix)
{
unsigned len = strlen(prefix) + strlen(suffix);
unsigned sep_len = strlen(separator);
struct namespace *iter;
char *ret, *ptr;
- if(use_abi_namespace && !is_global_namespace(namespace))
- len += 3 /* strlen("ABI") */ + sep_len;
+ if(abi_prefix)
+ len += strlen(abi_prefix) + sep_len;
for(iter = namespace; !is_global_namespace(iter); iter = iter->parent)
len += strlen(iter->name) + sep_len;
ret = xmalloc(len+1);
strcpy(ret, prefix);
- ptr = append_namespace(ret + strlen(ret), namespace, separator);
+ ptr = append_namespace(ret + strlen(ret), namespace, separator, abi_prefix);
strcpy(ptr, suffix);
return ret;
diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h
index b02b80e122c..7a43e517698 100644
--- a/tools/widl/widltypes.h
+++ b/tools/widl/widltypes.h
@@ -613,7 +613,8 @@ var_list_t *append_var(var_list_t *list, var_t *var);
void init_loc_info(loc_info_t *);
-char *format_namespace(struct namespace *namespace, const char *prefix, const char *separator, const char *suffix);
+char *format_namespace(struct namespace *namespace, const char *prefix, const char *separator, const char *suffix,
+ const char *abi_prefix);
static inline enum type_type type_get_type_detect_alias(const type_t *type)
{
--
2.29.2
More information about the wine-devel
mailing list