aboutsummaryrefslogtreecommitdiffstats
path: root/src/scanner.c
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2012-10-19 17:08:38 -0400
committerKristian Høgsberg <krh@bitplanet.net>2012-10-19 17:08:38 -0400
commitbdd272f024744b4ed5ba6daedef7eb023bcac7cb (patch)
tree61725e939ace9d69f52ddb6cc0f610e525a878b9 /src/scanner.c
parentconfigure: Depend on a more strict version of publican (diff)
downloadwayland-bdd272f024744b4ed5ba6daedef7eb023bcac7cb.tar
wayland-bdd272f024744b4ed5ba6daedef7eb023bcac7cb.tar.gz
wayland-bdd272f024744b4ed5ba6daedef7eb023bcac7cb.tar.bz2
wayland-bdd272f024744b4ed5ba6daedef7eb023bcac7cb.tar.lz
wayland-bdd272f024744b4ed5ba6daedef7eb023bcac7cb.tar.xz
wayland-bdd272f024744b4ed5ba6daedef7eb023bcac7cb.tar.zst
wayland-bdd272f024744b4ed5ba6daedef7eb023bcac7cb.zip
Move ARRAY_LENGTH out of public headers
Exporting unprefixed symbols is a pretty bad idea so don't do that. Instea of redefining it WL_ARRAY_LENGTH, we just move the define to our private header. The scanner generates code that uses ARRAY_LENGTH, but we can just make it count the number elements and emit an integer constant instead.
Diffstat (limited to 'src/scanner.c')
-rw-r--r--src/scanner.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/scanner.c b/src/scanner.c
index 47c22cb..d0aafec 100644
--- a/src/scanner.c
+++ b/src/scanner.c
@@ -127,6 +127,18 @@ struct parse_context {
unsigned int character_data_length;
};
+static int
+list_length(struct wl_list *list)
+{
+ struct wl_list *l;
+ int i;
+
+ for (i = 0, l = list->next; l != list; i++, l = l->next)
+ ;
+
+ return i;
+}
+
static char *
uppercase_dup(const char *src)
{
@@ -1106,14 +1118,14 @@ emit_code(struct protocol *protocol)
i->name, i->name, i->version);
if (!wl_list_empty(&i->request_list))
- printf("\tARRAY_LENGTH(%s_requests), %s_requests,\n",
- i->name, i->name);
+ printf("\t%d, %s_requests,\n",
+ list_length(&i->request_list), i->name);
else
printf("\t0, NULL,\n");
if (!wl_list_empty(&i->event_list))
- printf("\tARRAY_LENGTH(%s_events), %s_events,\n",
- i->name, i->name);
+ printf("\t%d, %s_events,\n",
+ list_length(&i->event_list), i->name);
else
printf("\t0, NULL,\n");