summaryrefslogtreecommitdiff
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
parent56061674cd80e701174c1f1b1bf575aa308ecbd8 (diff)
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.
-rw-r--r--cursor/wayland-cursor.c2
-rw-r--r--src/event-loop.c1
-rw-r--r--src/scanner.c20
-rw-r--r--src/wayland-private.h2
-rw-r--r--src/wayland-util.h2
5 files changed, 21 insertions, 6 deletions
diff --git a/cursor/wayland-cursor.c b/cursor/wayland-cursor.c
index 0d1fec7..25e51c2 100644
--- a/cursor/wayland-cursor.c
+++ b/cursor/wayland-cursor.c
@@ -31,6 +31,8 @@
#include "os-compatibility.h"
+#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
+
struct shm_pool {
struct wl_shm_pool *pool;
int fd;
diff --git a/src/event-loop.c b/src/event-loop.c
index e383300..8db9c7c 100644
--- a/src/event-loop.c
+++ b/src/event-loop.c
@@ -35,6 +35,7 @@
#include <unistd.h>
#include <assert.h>
#include "wayland-server.h"
+#include "wayland-private.h"
#include "wayland-os.h"
struct wl_event_loop {
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");
diff --git a/src/wayland-private.h b/src/wayland-private.h
index 8adee9f..0d617a7 100644
--- a/src/wayland-private.h
+++ b/src/wayland-private.h
@@ -28,6 +28,8 @@
#include <ffi.h>
#include "wayland-util.h"
+#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
+
#define WL_ZOMBIE_OBJECT ((void *) 2)
#define WL_MAP_SERVER_SIDE 0
diff --git a/src/wayland-util.h b/src/wayland-util.h
index f54077e..7c8f563 100644
--- a/src/wayland-util.h
+++ b/src/wayland-util.h
@@ -39,8 +39,6 @@ extern "C" {
#define WL_EXPORT
#endif
-#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
-
#define container_of(ptr, type, member) ({ \
const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})