add cmake, use libubox for uloop and list.h
authorFelix Fietkau <nbd@openwrt.org>
Mon, 7 Feb 2011 18:11:44 +0000 (19:11 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 7 Feb 2011 18:11:44 +0000 (19:11 +0100)
.gitignore [new file with mode: 0644]
CMakeLists.txt [new file with mode: 0644]
Makefile [deleted file]
list.h [deleted file]
relayd.h
uloop.c [deleted file]
uloop.h [deleted file]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..9474582
--- /dev/null
@@ -0,0 +1,6 @@
+Makefile
+CMakeCache.txt
+CMakeFiles
+*.cmake
+install_manifest.txt
+relayd
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..7e960ab
--- /dev/null
@@ -0,0 +1,18 @@
+cmake_minimum_required(VERSION 2.8)
+
+PROJECT(relayd C)
+ADD_DEFINITIONS(-Os -Wall -Werror --std=gnu99 -g3)
+
+IF(APPLE)
+  INCLUDE_DIRECTORIES(/opt/local/include)
+  LINK_DIRECTORIES(/opt/local/lib)
+ENDIF()
+
+ADD_EXECUTABLE(relayd main.c dhcp.c route.c)
+TARGET_LINK_LIBRARIES(relayd ubox)
+
+SET(CMAKE_INSTALL_PREFIX /usr)
+
+INSTALL(TARGETS relayd
+       RUNTIME DESTINATION sbin
+)
diff --git a/Makefile b/Makefile
deleted file mode 100644 (file)
index 5fd54e8..0000000
--- a/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-CFLAGS = -Os -Wall -Werror -pedantic --std=gnu99
-CPPFLAGS = -I.
-LDFLAGS =
-
-all: relayd 
-
-relayd: uloop.o main.o route.o dhcp.o
-       $(CC) -o $@ $^ $(LDFLAGS)
-
-relayd.h: list.h
-uloop.c: uloop.h
-main.c: uloop.h relayd.h
-route.c: relayd.h
-
-%.o: %.c
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $^
-
-
-clean:
-       rm -f relayd *.o
diff --git a/list.h b/list.h
deleted file mode 100644 (file)
index 2959a06..0000000
--- a/list.h
+++ /dev/null
@@ -1,601 +0,0 @@
-#ifndef _LINUX_LIST_H
-#define _LINUX_LIST_H
-
-#include <stddef.h>
-/**
- * container_of - cast a member of a structure out to the containing structure
- * @ptr:       the pointer to the member.
- * @type:      the type of the container struct this is embedded in.
- * @member:    the name of the member within the struct.
- *
- */
-#ifndef container_of
-#define container_of(ptr, type, member) (                      \
-       (type *)( (char *)ptr - offsetof(type,member) ))
-#endif
-
-
-/*
- * Simple doubly linked list implementation.
- *
- * Some of the internal functions ("__xxx") are useful when
- * manipulating whole lists rather than single entries, as
- * sometimes we already know the next/prev entries and we can
- * generate better code by using them directly rather than
- * using the generic single-entry routines.
- */
-
-struct list_head {
-       struct list_head *next, *prev;
-};
-
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
-
-#define LIST_HEAD(name) \
-       struct list_head name = LIST_HEAD_INIT(name)
-
-static inline void INIT_LIST_HEAD(struct list_head *list)
-{
-       list->next = list;
-       list->prev = list;
-}
-
-/*
- * Insert a new entry between two known consecutive entries.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static inline void __list_add(struct list_head *new,
-                             struct list_head *prev,
-                             struct list_head *next)
-{
-       next->prev = new;
-       new->next = next;
-       new->prev = prev;
-       prev->next = new;
-}
-
-/**
- * list_add - add a new entry
- * @new: new entry to be added
- * @head: list head to add it after
- *
- * Insert a new entry after the specified head.
- * This is good for implementing stacks.
- */
-static inline void list_add(struct list_head *new, struct list_head *head)
-{
-       __list_add(new, head, head->next);
-}
-
-
-/**
- * list_add_tail - add a new entry
- * @new: new entry to be added
- * @head: list head to add it before
- *
- * Insert a new entry before the specified head.
- * This is useful for implementing queues.
- */
-static inline void list_add_tail(struct list_head *new, struct list_head *head)
-{
-       __list_add(new, head->prev, head);
-}
-
-
-/*
- * Delete a list entry by making the prev/next entries
- * point to each other.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static inline void __list_del(struct list_head * prev, struct list_head * next)
-{
-       next->prev = prev;
-       prev->next = next;
-}
-
-/**
- * list_del - deletes entry from list.
- * @entry: the element to delete from the list.
- * Note: list_empty() on entry does not return true after this, the entry is
- * in an undefined state.
- */
-static inline void list_del(struct list_head *entry)
-{
-       __list_del(entry->prev, entry->next);
-       entry->next = NULL;
-       entry->prev = NULL;
-}
-
-/**
- * list_replace - replace old entry by new one
- * @old : the element to be replaced
- * @new : the new element to insert
- *
- * If @old was empty, it will be overwritten.
- */
-static inline void list_replace(struct list_head *old,
-                               struct list_head *new)
-{
-       new->next = old->next;
-       new->next->prev = new;
-       new->prev = old->prev;
-       new->prev->next = new;
-}
-
-static inline void list_replace_init(struct list_head *old,
-                                       struct list_head *new)
-{
-       list_replace(old, new);
-       INIT_LIST_HEAD(old);
-}
-
-/**
- * list_del_init - deletes entry from list and reinitialize it.
- * @entry: the element to delete from the list.
- */
-static inline void list_del_init(struct list_head *entry)
-{
-       __list_del(entry->prev, entry->next);
-       INIT_LIST_HEAD(entry);
-}
-
-/**
- * list_move - delete from one list and add as another's head
- * @list: the entry to move
- * @head: the head that will precede our entry
- */
-static inline void list_move(struct list_head *list, struct list_head *head)
-{
-       __list_del(list->prev, list->next);
-       list_add(list, head);
-}
-
-/**
- * list_move_tail - delete from one list and add as another's tail
- * @list: the entry to move
- * @head: the head that will follow our entry
- */
-static inline void list_move_tail(struct list_head *list,
-                                 struct list_head *head)
-{
-       __list_del(list->prev, list->next);
-       list_add_tail(list, head);
-}
-
-/**
- * list_is_last - tests whether @list is the last entry in list @head
- * @list: the entry to test
- * @head: the head of the list
- */
-static inline int list_is_last(const struct list_head *list,
-                               const struct list_head *head)
-{
-       return list->next == head;
-}
-
-/**
- * list_empty - tests whether a list is empty
- * @head: the list to test.
- */
-static inline int list_empty(const struct list_head *head)
-{
-       return head->next == head;
-}
-
-/**
- * list_empty_careful - tests whether a list is empty and not being modified
- * @head: the list to test
- *
- * Description:
- * tests whether a list is empty _and_ checks that no other CPU might be
- * in the process of modifying either member (next or prev)
- *
- * NOTE: using list_empty_careful() without synchronization
- * can only be safe if the only activity that can happen
- * to the list entry is list_del_init(). Eg. it cannot be used
- * if another CPU could re-list_add() it.
- */
-static inline int list_empty_careful(const struct list_head *head)
-{
-       struct list_head *next = head->next;
-       return (next == head) && (next == head->prev);
-}
-
-static inline void __list_splice(struct list_head *list,
-                                struct list_head *head)
-{
-       struct list_head *first = list->next;
-       struct list_head *last = list->prev;
-       struct list_head *at = head->next;
-
-       first->prev = head;
-       head->next = first;
-
-       last->next = at;
-       at->prev = last;
-}
-
-/**
- * list_splice - join two lists
- * @list: the new list to add.
- * @head: the place to add it in the first list.
- */
-static inline void list_splice(struct list_head *list, struct list_head *head)
-{
-       if (!list_empty(list))
-               __list_splice(list, head);
-}
-
-/**
- * list_splice_init - join two lists and reinitialise the emptied list.
- * @list: the new list to add.
- * @head: the place to add it in the first list.
- *
- * The list at @list is reinitialised
- */
-static inline void list_splice_init(struct list_head *list,
-                                   struct list_head *head)
-{
-       if (!list_empty(list)) {
-               __list_splice(list, head);
-               INIT_LIST_HEAD(list);
-       }
-}
-
-/**
- * list_entry - get the struct for this entry
- * @ptr:       the &struct list_head pointer.
- * @type:      the type of the struct this is embedded in.
- * @member:    the name of the list_struct within the struct.
- */
-#define list_entry(ptr, type, member) \
-       container_of(ptr, type, member)
-
-/**
- * list_first_entry - get the first element from a list
- * @ptr:       the list head to take the element from.
- * @type:      the type of the struct this is embedded in.
- * @member:    the name of the list_struct within the struct.
- *
- * Note, that list is expected to be not empty.
- */
-#define list_first_entry(ptr, type, member) \
-       list_entry((ptr)->next, type, member)
-
-/**
- * list_for_each       -       iterate over a list
- * @pos:       the &struct list_head to use as a loop cursor.
- * @head:      the head for your list.
- */
-#define list_for_each(pos, head) \
-       for (pos = (head)->next; pos != (head); \
-               pos = pos->next)
-
-/**
- * __list_for_each     -       iterate over a list
- * @pos:       the &struct list_head to use as a loop cursor.
- * @head:      the head for your list.
- *
- * This variant differs from list_for_each() in that it's the
- * simplest possible list iteration code, no prefetching is done.
- * Use this for code that knows the list to be very short (empty
- * or 1 entry) most of the time.
- */
-#define __list_for_each(pos, head) \
-       for (pos = (head)->next; pos != (head); pos = pos->next)
-
-/**
- * list_for_each_prev  -       iterate over a list backwards
- * @pos:       the &struct list_head to use as a loop cursor.
- * @head:      the head for your list.
- */
-#define list_for_each_prev(pos, head) \
-       for (pos = (head)->prev; pos != (head); \
-               pos = pos->prev)
-
-/**
- * list_for_each_safe - iterate over a list safe against removal of list entry
- * @pos:       the &struct list_head to use as a loop cursor.
- * @n:         another &struct list_head to use as temporary storage
- * @head:      the head for your list.
- */
-#define list_for_each_safe(pos, n, head) \
-       for (pos = (head)->next, n = pos->next; pos != (head); \
-               pos = n, n = pos->next)
-
-/**
- * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
- * @pos:       the &struct list_head to use as a loop cursor.
- * @n:         another &struct list_head to use as temporary storage
- * @head:      the head for your list.
- */
-#define list_for_each_prev_safe(pos, n, head) \
-       for (pos = (head)->prev, n = pos->prev; \
-            pos != (head); \
-            pos = n, n = pos->prev)
-
-/**
- * list_for_each_entry -       iterate over list of given type
- * @pos:       the type * to use as a loop cursor.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- */
-#define list_for_each_entry(pos, head, member)                         \
-       for (pos = list_entry((head)->next, typeof(*pos), member);      \
-            &pos->member != (head);    \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
-
-/**
- * list_for_each_entry_reverse - iterate backwards over list of given type.
- * @pos:       the type * to use as a loop cursor.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- */
-#define list_for_each_entry_reverse(pos, head, member)                 \
-       for (pos = list_entry((head)->prev, typeof(*pos), member);      \
-            &pos->member != (head);    \
-            pos = list_entry(pos->member.prev, typeof(*pos), member))
-
-/**
- * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
- * @pos:       the type * to use as a start point
- * @head:      the head of the list
- * @member:    the name of the list_struct within the struct.
- *
- * Prepares a pos entry for use as a start point in list_for_each_entry_continue().
- */
-#define list_prepare_entry(pos, head, member) \
-       ((pos) ? : list_entry(head, typeof(*pos), member))
-
-/**
- * list_for_each_entry_continue - continue iteration over list of given type
- * @pos:       the type * to use as a loop cursor.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- *
- * Continue to iterate over list of given type, continuing after
- * the current position.
- */
-#define list_for_each_entry_continue(pos, head, member)                \
-       for (pos = list_entry(pos->member.next, typeof(*pos), member);  \
-            &pos->member != (head);    \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
-
-/**
- * list_for_each_entry_continue_reverse - iterate backwards from the given point
- * @pos:       the type * to use as a loop cursor.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- *
- * Start to iterate over list of given type backwards, continuing after
- * the current position.
- */
-#define list_for_each_entry_continue_reverse(pos, head, member)                \
-       for (pos = list_entry(pos->member.prev, typeof(*pos), member);  \
-            &pos->member != (head);    \
-            pos = list_entry(pos->member.prev, typeof(*pos), member))
-
-/**
- * list_for_each_entry_from - iterate over list of given type from the current point
- * @pos:       the type * to use as a loop cursor.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- *
- * Iterate over list of given type, continuing from current position.
- */
-#define list_for_each_entry_from(pos, head, member)                    \
-       for (; &pos->member != (head);  \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
-
-/**
- * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
- * @pos:       the type * to use as a loop cursor.
- * @n:         another type * to use as temporary storage
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- */
-#define list_for_each_entry_safe(pos, n, head, member)                 \
-       for (pos = list_entry((head)->next, typeof(*pos), member),      \
-               n = list_entry(pos->member.next, typeof(*pos), member); \
-            &pos->member != (head);                                    \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
-
-/**
- * list_for_each_entry_safe_continue
- * @pos:       the type * to use as a loop cursor.
- * @n:         another type * to use as temporary storage
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- *
- * Iterate over list of given type, continuing after current point,
- * safe against removal of list entry.
- */
-#define list_for_each_entry_safe_continue(pos, n, head, member)                \
-       for (pos = list_entry(pos->member.next, typeof(*pos), member),          \
-               n = list_entry(pos->member.next, typeof(*pos), member);         \
-            &pos->member != (head);                                            \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
-
-/**
- * list_for_each_entry_safe_from
- * @pos:       the type * to use as a loop cursor.
- * @n:         another type * to use as temporary storage
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- *
- * Iterate over list of given type from current point, safe against
- * removal of list entry.
- */
-#define list_for_each_entry_safe_from(pos, n, head, member)                    \
-       for (n = list_entry(pos->member.next, typeof(*pos), member);            \
-            &pos->member != (head);                                            \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
-
-/**
- * list_for_each_entry_safe_reverse
- * @pos:       the type * to use as a loop cursor.
- * @n:         another type * to use as temporary storage
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- *
- * Iterate backwards over list of given type, safe against removal
- * of list entry.
- */
-#define list_for_each_entry_safe_reverse(pos, n, head, member)         \
-       for (pos = list_entry((head)->prev, typeof(*pos), member),      \
-               n = list_entry(pos->member.prev, typeof(*pos), member); \
-            &pos->member != (head);                                    \
-            pos = n, n = list_entry(n->member.prev, typeof(*n), member))
-
-/*
- * Double linked lists with a single pointer list head.
- * Mostly useful for hash tables where the two pointer list head is
- * too wasteful.
- * You lose the ability to access the tail in O(1).
- */
-
-struct hlist_head {
-       struct hlist_node *first;
-};
-
-struct hlist_node {
-       struct hlist_node *next, **pprev;
-};
-
-#define HLIST_HEAD_INIT { .first = NULL }
-#define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
-#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
-static inline void INIT_HLIST_NODE(struct hlist_node *h)
-{
-       h->next = NULL;
-       h->pprev = NULL;
-}
-
-static inline int hlist_unhashed(const struct hlist_node *h)
-{
-       return !h->pprev;
-}
-
-static inline int hlist_empty(const struct hlist_head *h)
-{
-       return !h->first;
-}
-
-static inline void __hlist_del(struct hlist_node *n)
-{
-       struct hlist_node *next = n->next;
-       struct hlist_node **pprev = n->pprev;
-       *pprev = next;
-       if (next)
-               next->pprev = pprev;
-}
-
-static inline void hlist_del(struct hlist_node *n)
-{
-       __hlist_del(n);
-       n->next = NULL;
-       n->pprev = NULL;
-}
-
-static inline void hlist_del_init(struct hlist_node *n)
-{
-       if (!hlist_unhashed(n)) {
-               __hlist_del(n);
-               INIT_HLIST_NODE(n);
-       }
-}
-
-
-static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
-{
-       struct hlist_node *first = h->first;
-       n->next = first;
-       if (first)
-               first->pprev = &n->next;
-       h->first = n;
-       n->pprev = &h->first;
-}
-
-
-/* next must be != NULL */
-static inline void hlist_add_before(struct hlist_node *n,
-                                       struct hlist_node *next)
-{
-       n->pprev = next->pprev;
-       n->next = next;
-       next->pprev = &n->next;
-       *(n->pprev) = n;
-}
-
-static inline void hlist_add_after(struct hlist_node *n,
-                                       struct hlist_node *next)
-{
-       next->next = n->next;
-       n->next = next;
-       next->pprev = &n->next;
-
-       if(next->next)
-               next->next->pprev  = &next->next;
-}
-
-#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
-
-#define hlist_for_each(pos, head) \
-       for (pos = (head)->first; pos; pos = pos->next)
-
-#define hlist_for_each_safe(pos, n, head) \
-       for (pos = (head)->first; pos; pos = n)
-
-/**
- * hlist_for_each_entry        - iterate over list of given type
- * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
- */
-#define hlist_for_each_entry(tpos, pos, head, member)                   \
-       for (pos = (head)->first; pos &&                                 \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
-            pos = pos->next)
-
-/**
- * hlist_for_each_entry_continue - iterate over a hlist continuing after current point
- * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @member:    the name of the hlist_node within the struct.
- */
-#define hlist_for_each_entry_continue(tpos, pos, member)               \
-       for (pos = (pos)->next; pos &&                                  \
-            ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;});   \
-            pos = pos->next)
-
-/**
- * hlist_for_each_entry_from - iterate over a hlist continuing from current point
- * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @member:    the name of the hlist_node within the struct.
- */
-#define hlist_for_each_entry_from(tpos, pos, member)                    \
-       for (; pos &&                    \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
-            pos = pos->next)
-
-/**
- * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
- * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @n:         another &struct hlist_node to use as temporary storage
- * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
- */
-#define hlist_for_each_entry_safe(tpos, pos, n, head, member)           \
-       for (pos = (head)->first;                                        \
-            pos && ({ n = pos->next; 1; }) &&                           \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
-            pos = n)
-
-#endif
index cd24aa6feacd2f0199a8da8d2e8d6a2c8bd80307..3a93204a91ebb599d4acb71920724c0f2434f87b 100644 (file)
--- a/relayd.h
+++ b/relayd.h
@@ -32,8 +32,8 @@
 #include <stdint.h>
 #include <stdbool.h>
 
-#include "uloop.h"
-#include "list.h"
+#include <libubox/uloop.h>
+#include <libubox/list.h>
 
 #define DEBUG
 #ifdef DEBUG
diff --git a/uloop.c b/uloop.c
deleted file mode 100644 (file)
index da418b7..0000000
--- a/uloop.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- *   Copyright (C) 2010 Felix Fietkau <nbd@openwrt.org>
- *   Copyright (C) 2010 John Crispin <blogic@openwrt.org>
- *   Copyright (C) 2010 Steven Barth <steven@midlink.org>
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/epoll.h>
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <poll.h>
-#include <string.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <stdbool.h>
-
-#include "uloop.h"
-
-/**
- * FIXME: uClibc < 0.9.30.3 does not define EPOLLRDHUP for Linux >= 2.6.17
- */
-#ifndef EPOLLRDHUP
-#define EPOLLRDHUP 0x2000
-#endif
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-#endif
-
-struct uloop_timeout *first_timeout;
-static int epoll_fd;
-static bool cancel;
-
-int uloop_fd_add(struct uloop_fd *sock, unsigned int flags)
-{
-       struct epoll_event ev;
-       int op = sock->registered ? EPOLL_CTL_MOD : EPOLL_CTL_ADD;
-       unsigned int fl;
-       int ret;
-
-       fl = fcntl(sock->fd, F_GETFL, 0);
-       fl |= O_NONBLOCK;
-       fcntl(sock->fd, F_SETFL, fl);
-
-       memset(&ev, 0, sizeof(struct epoll_event));
-
-       if (flags & ULOOP_READ)
-               ev.events |= EPOLLIN | EPOLLRDHUP;
-
-       if (flags & ULOOP_WRITE)
-               ev.events |= EPOLLOUT;
-
-       if (flags & ULOOP_EDGE_TRIGGER)
-               ev.events |= EPOLLET;
-
-       ev.data.fd = sock->fd;
-       ev.data.ptr = sock;
-
-       ret = epoll_ctl(epoll_fd, op, sock->fd, &ev);
-       if (ret < 0)
-               goto out;
-
-       sock->registered = true;
-       sock->eof = false;
-
-out:
-       return ret;
-}
-
-int uloop_fd_delete(struct uloop_fd *sock)
-{
-       sock->registered = false;
-       return epoll_ctl(epoll_fd, EPOLL_CTL_DEL, sock->fd, 0);
-}
-
-static int tv_diff(struct timeval *t1, struct timeval *t2)
-{
-       if (t1->tv_sec != t2->tv_sec)
-               return (t1->tv_sec - t2->tv_sec) * 1000;
-       else
-               return (t1->tv_usec - t2->tv_usec) / 1000;
-}
-
-int uloop_timeout_add(struct uloop_timeout *timeout)
-{
-       struct uloop_timeout **head = &first_timeout;
-       struct uloop_timeout *prev = NULL;
-
-       if (timeout->pending)
-               return -1;
-
-       while (*head) {
-               if (tv_diff(&(*head)->time, &timeout->time) > 0)
-                       break;
-
-               prev = *head;
-               head = &(*head)->next;
-       }
-
-       timeout->prev = prev;
-       timeout->next = *head;
-       if (timeout->next)
-               timeout->next->prev = timeout;
-       *head = timeout;
-       timeout->pending = true;
-
-       return 0;
-}
-
-int uloop_timeout_set(struct uloop_timeout *timeout, int msecs)
-{
-       struct timeval *time = &timeout->time;
-
-       if (timeout->pending)
-               uloop_timeout_cancel(timeout);
-
-       gettimeofday(&timeout->time, NULL);
-
-       time->tv_sec += msecs / 1000;
-       time->tv_usec += msecs % 1000;
-
-       if (time->tv_usec > 1000000) {
-               time->tv_sec++;
-               time->tv_usec %= 100000;
-       }
-
-       return uloop_timeout_add(timeout);
-}
-
-int uloop_timeout_cancel(struct uloop_timeout *timeout)
-{
-       if (!timeout->pending)
-               return -1;
-
-       if (timeout->prev)
-               timeout->prev->next = timeout->next;
-       else
-               first_timeout = timeout->next;
-
-       if (timeout->next)
-               timeout->next->prev = timeout->prev;
-
-       timeout->pending = false;
-
-       return 0;
-}
-
-static void uloop_handle_sigint(int signo)
-{
-       cancel = true;
-}
-
-static void uloop_setup_signals(void)
-{
-       struct sigaction s;
-       memset(&s, 0, sizeof(struct sigaction));
-       s.sa_handler = uloop_handle_sigint;
-       s.sa_flags = 0;
-       sigaction(SIGINT, &s, NULL);
-}
-
-static int uloop_get_next_timeout(struct timeval *tv)
-{
-       int diff;
-
-       if (!first_timeout)
-               return -1;
-
-       diff = tv_diff(&first_timeout->time, tv);
-       if (diff < 0)
-               return 0;
-
-       return diff;
-}
-
-static void uloop_process_timeouts(struct timeval *tv)
-{
-       struct uloop_timeout *timeout;
-
-       while (first_timeout) {
-               if (tv_diff(&first_timeout->time, tv) > 0)
-                       break;
-
-               timeout = first_timeout;
-               uloop_timeout_cancel(timeout);
-               if (timeout->cb)
-                       timeout->cb(timeout);
-       }
-}
-
-void uloop_end(void)
-{
-       cancel = true;
-}
-
-int uloop_init(void)
-{
-       epoll_fd = epoll_create(32);
-       if (epoll_fd < 0)
-               return -1;
-
-       fcntl(epoll_fd, F_SETFD, fcntl(epoll_fd, F_GETFD) | FD_CLOEXEC);
-       return 0;
-}
-
-void uloop_run(void)
-{
-       struct epoll_event events[10];
-       struct timeval tv;
-       int timeout;
-       int nfds, n;
-
-       uloop_setup_signals();
-       while(!cancel)
-       {
-               gettimeofday(&tv, NULL);
-               uloop_process_timeouts(&tv);
-               timeout = uloop_get_next_timeout(&tv);
-               nfds = epoll_wait(epoll_fd, events, ARRAY_SIZE(events), timeout);
-               for(n = 0; n < nfds; ++n)
-               {
-                       struct uloop_fd *u = events[n].data.ptr;
-                       unsigned int ev = 0;
-
-                       if(events[n].events & EPOLLERR) {
-                               u->error = true;
-                               uloop_fd_delete(u);
-                       }
-
-                       if(!(events[n].events & (EPOLLRDHUP|EPOLLIN|EPOLLOUT|EPOLLERR)))
-                               continue;
-
-                       if(events[n].events & EPOLLRDHUP)
-                               u->eof = true;
-
-                       if(events[n].events & EPOLLIN)
-                               ev |= ULOOP_READ;
-
-                       if(events[n].events & EPOLLOUT)
-                               ev |= ULOOP_WRITE;
-
-                       if(u->cb)
-                               u->cb(u, ev);
-               }
-       }
-}
-
-void uloop_done(void)
-{
-       close(epoll_fd);
-}
diff --git a/uloop.h b/uloop.h
deleted file mode 100644 (file)
index f84050a..0000000
--- a/uloop.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *   Copyright (C) 2010 Felix Fietkau <nbd@openwrt.org>
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#ifndef _ULOOP_H__
-#define _ULOOP_H__
-
-#include <sys/time.h>
-#include <stdbool.h>
-
-struct uloop_fd;
-struct uloop_timeout;
-
-typedef void (*uloop_fd_handler)(struct uloop_fd *u, unsigned int events);
-typedef void (*uloop_timeout_handler)(struct uloop_timeout *t);
-
-#define ULOOP_READ             (1 << 0)
-#define ULOOP_WRITE            (1 << 1)
-#define ULOOP_EDGE_TRIGGER     (1 << 2)
-
-struct uloop_fd
-{
-       uloop_fd_handler cb;
-       int fd;
-       bool eof;
-       bool error;
-       bool registered;
-};
-
-struct uloop_timeout
-{
-       uloop_timeout_handler cb;
-       struct uloop_timeout *prev;
-       struct uloop_timeout *next;
-       struct timeval time;
-       bool pending;
-};
-
-int uloop_fd_add(struct uloop_fd *sock, unsigned int flags);
-int uloop_fd_delete(struct uloop_fd *sock);
-
-int uloop_timeout_add(struct uloop_timeout *timeout);
-int uloop_timeout_set(struct uloop_timeout *timeout, int msecs);
-int uloop_timeout_cancel(struct uloop_timeout *timeout);
-
-void uloop_end(void);
-int uloop_init(void);
-void uloop_run(void);
-void uloop_done(void);
-
-#endif