widl: Change write_type_def_or_decl and write_type_decl to take an argument name instead of a printf format.

oldstable
Alexandre Julliard 2009-02-10 12:32:36 +01:00
parent 2524523ea4
commit 20e4cb98a7
3 changed files with 17 additions and 24 deletions

View File

@ -149,7 +149,7 @@ static void write_field(FILE *h, var_t *v)
if (!v) return;
if (v->type) {
indent(h, 0);
write_type_def_or_decl(h, v->type, TRUE, "%s", v->name);
write_type_def_or_decl(h, v->type, TRUE, v->name);
fprintf(h, ";\n");
}
}
@ -278,8 +278,7 @@ void write_type_right(FILE *h, type_t *t, int is_field)
}
}
void write_type_v(FILE *h, type_t *t, int is_field, int declonly,
const char *fmt, va_list args)
static void write_type_v(FILE *h, type_t *t, int is_field, int declonly, const char *name)
{
type_t *pt;
int ptr_level = 0;
@ -302,11 +301,9 @@ void write_type_v(FILE *h, type_t *t, int is_field, int declonly,
fputc('*', h);
} else
write_type_left(h, t, declonly);
if (fmt) {
if (needs_space_after(t))
fputc(' ', h);
vfprintf(h, fmt, args);
}
if (name) fprintf(h, "%s%s", needs_space_after(t) ? " " : "", name );
if (pt->type == RPC_FC_FUNCTION) {
if (ptr_level) fputc(')', h);
fputc('(', h);
@ -316,20 +313,14 @@ void write_type_v(FILE *h, type_t *t, int is_field, int declonly,
write_type_right(h, t, is_field);
}
void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *fmt, ...)
void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *name)
{
va_list args;
va_start(args, fmt);
write_type_v(f, t, field, FALSE, fmt, args);
va_end(args);
write_type_v(f, t, field, FALSE, name);
}
void write_type_decl(FILE *f, type_t *t, const char *fmt, ...)
void write_type_decl(FILE *f, type_t *t, const char *name)
{
va_list args;
va_start(args, fmt);
write_type_v(f, t, FALSE, TRUE, fmt, args);
va_end(args);
write_type_v(f, t, FALSE, TRUE, name);
}
void write_type_decl_left(FILE *f, type_t *t)
@ -471,7 +462,7 @@ static void write_generic_handle_routines(FILE *header)
static void write_typedef(FILE *header, type_t *type)
{
fprintf(header, "typedef ");
write_type_def_or_decl(header, type_alias_get_aliasee(type), FALSE, "%s", type->name);
write_type_def_or_decl(header, type_alias_get_aliasee(type), FALSE, type->name);
fprintf(header, ";\n");
}
@ -515,7 +506,7 @@ static void write_declaration(FILE *header, const var_t *v)
fprintf(header, "extern ");
break;
}
write_type_def_or_decl(header, v->type, FALSE, "%s", v->name);
write_type_def_or_decl(header, v->type, FALSE, v->name);
fprintf(header, ";\n\n");
}
}
@ -677,7 +668,7 @@ void write_args(FILE *h, const var_list_t *args, const char *name, int method, i
}
else fprintf(h, ",");
}
write_type_decl(h, arg->type, "%s", arg->name);
write_type_decl(h, arg->type, arg->name);
count++;
}
if (do_indent) indentation--;

View File

@ -34,8 +34,8 @@ extern int is_declptr(const type_t *t);
extern const char* get_name(const var_t *v);
extern void write_type_left(FILE *h, type_t *t, int declonly);
extern void write_type_right(FILE *h, type_t *t, int is_field);
extern void write_type_def_or_decl(FILE *h, type_t *t, int is_field, const char *fmt, ...) __attribute__((format (printf, 4, 5)));
extern void write_type_decl(FILE *f, type_t *t, const char *fmt, ...) __attribute__((format (printf, 3, 4)));
extern void write_type_def_or_decl(FILE *h, type_t *t, int is_field, const char *name);
extern void write_type_decl(FILE *f, type_t *t, const char *name);
extern void write_type_decl_left(FILE *f, type_t *t);
extern int needs_space_after(type_t *t);
extern int is_object(const attr_list_t *list);

View File

@ -3383,12 +3383,14 @@ void declare_stub_args( FILE *file, int indent, const var_t *func )
if (!in_attr && !is_conformant_array(var->type) && !is_string)
{
type_t *type_to_print;
char name[16];
print_file(file, indent, "%s", "");
if (var->type->declarray)
type_to_print = var->type;
else
type_to_print = type_pointer_get_ref(var->type);
write_type_decl(file, type_to_print, "_W%u", i++);
sprintf(name, "_W%u", i++);
write_type_decl(file, type_to_print, name);
fprintf(file, ";\n");
}