diff options
author | Zheng Da <zhengda1936@gmail.com> | 2016-11-02 17:52:35 +0100 |
---|---|---|
committer | Justus Winter <justus@gnupg.org> | 2016-11-04 15:40:17 +0100 |
commit | 50e14fce11f2bebb4faad220f8f610a55f4110c5 (patch) | |
tree | a23f2e0a2639cf35ec546b77c77b63fc9fc571cb /libbpf/queue.c | |
parent | 0bc74163d5406e305b84f8f51dbce097bb46fa90 (diff) |
libbpf: Merge the Berkeley Packet Filter library.
* Makefile (lib-subdirs): Add new library.
* NEWS: Update.
* libbpf/Makefile: New file.
* libbpf/bpf_impl.c: Likewise.
* libbpf/bpf_impl.h: Likewise.
* libbpf/queue.c: Likewise.
* libbpf/queue.h: Likewise.
* libbpf/util.h: Likewise.
The Berkeley Packet Filter implementation has been extracted from the
Mach kernel by Zheng Da. This merges his work into the main
repository.
Diffstat (limited to 'libbpf/queue.c')
-rw-r--r-- | libbpf/queue.c | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/libbpf/queue.c b/libbpf/queue.c new file mode 100644 index 00000000..33234344 --- /dev/null +++ b/libbpf/queue.c @@ -0,0 +1,131 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * Routines to implement queue package. + */ + +#include "queue.h" + + + +/* + * Insert element at head of queue. + */ +void enqueue_head( + register queue_t que, + register queue_entry_t elt) +{ + elt->next = que->next; + elt->prev = que; + elt->next->prev = elt; + que->next = elt; +} + +/* + * Insert element at tail of queue. + */ +void enqueue_tail( + register queue_t que, + register queue_entry_t elt) +{ + elt->next = que; + elt->prev = que->prev; + elt->prev->next = elt; + que->prev = elt; +} + +/* + * Remove and return element at head of queue. + */ +queue_entry_t dequeue_head( + register queue_t que) +{ + register queue_entry_t elt; + + if (que->next == que) + return((queue_entry_t)0); + + elt = que->next; + elt->next->prev = que; + que->next = elt->next; + return(elt); +} + +/* + * Remove and return element at tail of queue. + */ +queue_entry_t dequeue_tail( + register queue_t que) +{ + register queue_entry_t elt; + + if (que->prev == que) + return((queue_entry_t)0); + + elt = que->prev; + elt->prev->next = que; + que->prev = elt->prev; + return(elt); +} + +/* + * Remove arbitrary element from queue. + * Does not check whether element is on queue - the world + * will go haywire if it isn't. + */ + +/*ARGSUSED*/ +void remqueue( + queue_t que, + register queue_entry_t elt) +{ + elt->next->prev = elt->prev; + elt->prev->next = elt->next; +} + +/* + * Routines to directly imitate the VAX hardware queue + * package. + */ +void insque( + register struct queue_entry *entry, + register struct queue_entry *pred) +{ + entry->next = pred->next; + entry->prev = pred; + (pred->next)->prev = entry; + pred->next = entry; +} + +struct queue_entry +*remque( + register struct queue_entry *elt) +{ + (elt->next)->prev = elt->prev; + (elt->prev)->next = elt->next; + return(elt); +} + |