scanner: fix writing i586 descriptions

This moves desc as first argument of desc_dump().
Description writing was broken on i586 because desc_dump() used
va_arg() after a vsnprintf() call to find the last argument.
But after calling a function with a va_arg argument, this arguments is
undefined.
This commit is contained in:
Olivier Blin 2012-10-15 00:49:11 +02:00 committed by Kristian Høgsberg
parent dc28c0bafd
commit f36c61571f

View file

@ -158,15 +158,14 @@ static const char *indent(int n)
} }
static void static void
desc_dump(const char *fmt, ...) desc_dump(char *desc, const char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[128], *desc, hang; char buf[128], hang;
int col, i, j, k, startcol; int col, i, j, k, startcol;
va_start(ap, fmt); va_start(ap, fmt);
vsnprintf(buf, sizeof buf, fmt, ap); vsnprintf(buf, sizeof buf, fmt, ap);
desc = va_arg(ap, char *);
va_end(ap); va_end(ap);
for (i = 0, col = 0; buf[i] != '*'; i++) { for (i = 0, col = 0; buf[i] != '*'; i++) {
@ -718,18 +717,19 @@ emit_enumerations(struct interface *interface)
if (desc) { if (desc) {
printf("/**\n"); printf("/**\n");
desc_dump(" * %s_%s - ", desc_dump(desc->summary,
interface->name, e->name, desc->summary); " * %s_%s - ",
interface->name, e->name);
wl_list_for_each(entry, &e->entry_list, link) { wl_list_for_each(entry, &e->entry_list, link) {
desc_dump(" * @%s_%s_%s: ", desc_dump(entry->summary,
" * @%s_%s_%s: ",
interface->uppercase_name, interface->uppercase_name,
e->uppercase_name, e->uppercase_name,
entry->uppercase_name, entry->uppercase_name);
entry->summary);
} }
if (desc->text) { if (desc->text) {
printf(" *\n"); printf(" *\n");
desc_dump(" * ", desc->text); desc_dump(desc->text, " * ");
} }
printf(" */\n"); printf(" */\n");
} }
@ -759,14 +759,15 @@ emit_structs(struct wl_list *message_list, struct interface *interface)
if (interface->description) { if (interface->description) {
struct description *desc = interface->description; struct description *desc = interface->description;
printf("/**\n"); printf("/**\n");
desc_dump(" * %s - ", interface->name, desc->summary); desc_dump(desc->summary, " * %s - ", interface->name);
wl_list_for_each(m, message_list, link) { wl_list_for_each(m, message_list, link) {
struct description *mdesc = m->description; struct description *mdesc = m->description;
desc_dump(" * @%s: ", desc_dump(mdesc ? mdesc->summary : "(none)",
m->name, mdesc ? mdesc->summary : "(none)"); " * @%s: ",
m->name);
} }
printf(" *\n"); printf(" *\n");
desc_dump(" * ", desc->text); desc_dump(desc->text, " * ");
printf(" */\n"); printf(" */\n");
} }
printf("struct %s_%s {\n", interface->name, printf("struct %s_%s {\n", interface->name,
@ -776,8 +777,8 @@ emit_structs(struct wl_list *message_list, struct interface *interface)
struct description *mdesc = m->description; struct description *mdesc = m->description;
printf("\t/**\n"); printf("\t/**\n");
desc_dump("\t * %s - ", desc_dump(mdesc ? mdesc->summary : "(none)",
m->name, mdesc ? mdesc->summary : "(none)"); "\t * %s - ", m->name);
wl_list_for_each(a, &m->arg_list, link) { wl_list_for_each(a, &m->arg_list, link) {
if (is_interface && a->type == NEW_ID && if (is_interface && a->type == NEW_ID &&
@ -786,12 +787,12 @@ emit_structs(struct wl_list *message_list, struct interface *interface)
"\t * @version: version of the objects interface\n"); "\t * @version: version of the objects interface\n");
desc_dump("\t * @%s: ", desc_dump(a->summary ? a->summary : "(none)",
a->name, a->summary ? a->summary : "(none)"); "\t * @%s: ", a->name);
} }
if (mdesc) { if (mdesc) {
printf("\t *\n"); printf("\t *\n");
desc_dump("\t * ", mdesc->text); desc_dump(mdesc->text, "\t * ");
} }
if (m->since > 1) { if (m->since > 1) {
printf("\t * @since: %d\n", m->since); printf("\t * @since: %d\n", m->since);