PKG_CHECK_MODULES([twin], [libtwin])
-mkdir -p discover ui/test ui/common lib/talloc lib/pb-protocol lib/list
+mkdir -p discover ui/test ui/common lib/talloc lib/pb-protocol lib/list \
+ lib/waiter
AC_OUTPUT
#include <asm/byteorder.h>
#include <talloc/talloc.h>
+#include <waiter/waiter.h>
#include "pb-protocol/pb-protocol.h"
#include "list/list.h"
#include "log.h"
-#include "waiter.h"
#include "device-handler.h"
#include "discover-server.h"
#include <stdlib.h>
#include <signal.h>
+#include <waiter/waiter.h>
+
#include "udev.h"
#include "discover-server.h"
#include "device-handler.h"
-#include "waiter.h"
#include "log.h"
static int running;
#include <sys/un.h>
#include <talloc/talloc.h>
+#include <waiter/waiter.h>
#include "udev.h"
#include "log.h"
-#include "waiter.h"
#include "pb-discover.h"
#include "device-handler.h"
+++ /dev/null
-
-#include <poll.h>
-#include <string.h>
-#include <assert.h>
-
-#include <talloc/talloc.h>
-
-#include "waiter.h"
-
-struct waiter {
- int fd;
- int events;
- waiter_cb callback;
- void *arg;
-};
-
-static struct waiter *waiters;
-static int n_waiters;
-
-struct waiter *waiter_register(int fd, int events,
- waiter_cb callback, void *arg)
-{
- struct waiter *waiter;
-
- n_waiters++;
-
- waiters = talloc_realloc(NULL, waiters, struct waiter, n_waiters);
- waiter = &waiters[n_waiters - 1];
-
- waiter->fd = fd;
- waiter->events = events;
- waiter->callback = callback;
- waiter->arg = arg;
-
- return 0;
-}
-
-void waiter_remove(struct waiter *waiter)
-{
- int i;
-
- i = waiter - waiters;
- assert(i >= 0 && i < n_waiters);
-
- n_waiters--;
- memmove(&waiters[i], &waiters[i+1], n_waiters - i);
-
- waiters = talloc_realloc(NULL, waiters, struct waiter, n_waiters);
-}
-
-int waiter_poll(void)
-{
- static struct pollfd *pollfds;
- static int n_pollfds;
- int i, rc;
-
- if (n_waiters > n_pollfds) {
- pollfds = talloc_realloc(NULL, pollfds,
- struct pollfd, n_waiters);
- }
-
- for (i = 0; i < n_waiters; i++) {
- pollfds[i].fd = waiters[i].fd;
- pollfds[i].events = waiters[i].events;
- pollfds[i].revents = 0;
- }
-
- rc = poll(pollfds, n_waiters, -1);
-
- if (rc <= 0)
- return rc;
-
- for (i = 0; i < n_waiters; i++) {
- if (pollfds[i].revents) {
- rc = waiters[i].callback(waiters[i].arg);
-
- if (rc)
- waiter_remove(&waiters[i]);
- }
- }
-
- return 0;
-}
+++ /dev/null
-#ifndef _WAITER_H
-#define _WAITER_H
-
-#include <poll.h>
-
-struct waiter;
-
-enum events {
- WAIT_IN = POLLIN,
- WAIT_OUT = POLLOUT,
-};
-
-typedef int (*waiter_cb)(void *);
-
-struct waiter *waiter_register(int fd, int events,
- waiter_cb callback, void *arg);
-
-void waiter_remove(struct waiter *waiter);
-
-int waiter_poll(void);
-#endif /* _WAITER_H */
-
-
--- /dev/null
+
+#include <poll.h>
+#include <string.h>
+#include <assert.h>
+
+#include <talloc/talloc.h>
+
+#include "waiter.h"
+
+struct waiter {
+ int fd;
+ int events;
+ waiter_cb callback;
+ void *arg;
+};
+
+static struct waiter *waiters;
+static int n_waiters;
+
+struct waiter *waiter_register(int fd, int events,
+ waiter_cb callback, void *arg)
+{
+ struct waiter *waiter;
+
+ n_waiters++;
+
+ waiters = talloc_realloc(NULL, waiters, struct waiter, n_waiters);
+ waiter = &waiters[n_waiters - 1];
+
+ waiter->fd = fd;
+ waiter->events = events;
+ waiter->callback = callback;
+ waiter->arg = arg;
+
+ return 0;
+}
+
+void waiter_remove(struct waiter *waiter)
+{
+ int i;
+
+ i = waiter - waiters;
+ assert(i >= 0 && i < n_waiters);
+
+ n_waiters--;
+ memmove(&waiters[i], &waiters[i+1], n_waiters - i);
+
+ waiters = talloc_realloc(NULL, waiters, struct waiter, n_waiters);
+}
+
+int waiter_poll(void)
+{
+ static struct pollfd *pollfds;
+ static int n_pollfds;
+ int i, rc;
+
+ if (n_waiters > n_pollfds) {
+ pollfds = talloc_realloc(NULL, pollfds,
+ struct pollfd, n_waiters);
+ }
+
+ for (i = 0; i < n_waiters; i++) {
+ pollfds[i].fd = waiters[i].fd;
+ pollfds[i].events = waiters[i].events;
+ pollfds[i].revents = 0;
+ }
+
+ rc = poll(pollfds, n_waiters, -1);
+
+ if (rc <= 0)
+ return rc;
+
+ for (i = 0; i < n_waiters; i++) {
+ if (pollfds[i].revents) {
+ rc = waiters[i].callback(waiters[i].arg);
+
+ if (rc)
+ waiter_remove(&waiters[i]);
+ }
+ }
+
+ return 0;
+}
--- /dev/null
+#ifndef _WAITER_H
+#define _WAITER_H
+
+#include <poll.h>
+
+struct waiter;
+
+enum events {
+ WAIT_IN = POLLIN,
+ WAIT_OUT = POLLOUT,
+};
+
+typedef int (*waiter_cb)(void *);
+
+struct waiter *waiter_register(int fd, int events,
+ waiter_cb callback, void *arg);
+
+void waiter_remove(struct waiter *waiter);
+
+int waiter_poll(void);
+#endif /* _WAITER_H */
+
+
talloc_objs = lib/talloc/talloc.o
list_objs = lib/list/list.o
+waiter_objs = lib/waiter/waiter.o
server_objs = lib/pb-protocol/pb-protocol.o
parser_objs = discover/parser.o discover/parser-utils.o \
$(foreach p, $(parsers), discover/$(p)-parser.o)
# $(foreach p,$(parsers),discover/$(p)-parser.o)
pb_discover_objs = discover/pb-discover.o discover/udev.o discover/log.o \
- discover/waiter.o discover/discover-server.o \
- discover/device-handler.o discover/paths.o \
- $(talloc_objs) $(server_objs) $(parser_objs) $(list_objs)
+ discover/discover-server.o discover/device-handler.o \
+ discover/paths.o $(talloc_objs) $(server_objs) \
+ $(parser_objs) $(list_objs) $(waiter_objs)
discover/pb-discover: $(pb_discover_objs)
$(LINK.o) -o $@ $^