003 File Manager
Current Path:
/usr/src/contrib/ntp/include
usr
/
src
/
contrib
/
ntp
/
include
/
📁
..
📄
Makefile.am
(1.2 KB)
📄
Makefile.in
(24.68 KB)
📄
README
(157 B)
📄
adjtime.h
(1.96 KB)
📄
ascii.h
(2.78 KB)
📄
audio.h
(283 B)
📄
binio.h
(3.26 KB)
📄
declcond.h
(803 B)
📄
gps.h
(2.84 KB)
📄
hopf6039.h
(3.51 KB)
📄
icom.h
(2.33 KB)
📄
ieee754io.h
(2.94 KB)
📄
intreswork.h
(808 B)
📄
iosignal.h
(1.46 KB)
📁
isc
📄
l_stdlib.h
(4.8 KB)
📄
lib_strbuf.h
(674 B)
📄
libntp.h
(436 B)
📄
libssl_compat.h
(4.25 KB)
📄
mbg_gps166.h
(36.84 KB)
📄
mx4200.h
(2.15 KB)
📄
ntif.h
(2.86 KB)
📄
ntp.h
(33.52 KB)
📄
ntp_assert.h
(2.73 KB)
📄
ntp_calendar.h
(14.99 KB)
📄
ntp_calgps.h
(4.02 KB)
📄
ntp_cmdargs.h
(38 B)
📄
ntp_config.h
(8.33 KB)
📄
ntp_control.h
(5.66 KB)
📄
ntp_crypto.h
(6.61 KB)
📄
ntp_datum.h
(1.07 KB)
📄
ntp_debug.h
(635 B)
📄
ntp_filegen.h
(1.76 KB)
📄
ntp_fp.h
(13.37 KB)
📄
ntp_if.h
(651 B)
📄
ntp_intres.h
(1.77 KB)
📄
ntp_io.h
(1.82 KB)
📄
ntp_keyacc.h
(658 B)
📄
ntp_libopts.h
(330 B)
📄
ntp_lineedit.h
(251 B)
📄
ntp_lists.h
(12.09 KB)
📄
ntp_machine.h
(7.18 KB)
📄
ntp_malloc.h
(1.18 KB)
📄
ntp_md5.h
(1.32 KB)
📄
ntp_net.h
(6.61 KB)
📄
ntp_prio_q.h
(1.93 KB)
📄
ntp_proto.h
(95 B)
📄
ntp_psl.h
(342 B)
📄
ntp_random.h
(402 B)
📄
ntp_refclock.h
(7.81 KB)
📄
ntp_request.h
(30.83 KB)
📄
ntp_rfc2553.h
(8.46 KB)
📄
ntp_select.h
(1.02 KB)
📄
ntp_stdlib.h
(9.83 KB)
📄
ntp_string.h
(708 B)
📄
ntp_syscall.h
(1.17 KB)
📄
ntp_syslog.h
(2.94 KB)
📄
ntp_tty.h
(2.61 KB)
📄
ntp_types.h
(7.21 KB)
📄
ntp_unixtime.h
(1.6 KB)
📄
ntp_worker.h
(5.54 KB)
📄
ntp_workimpl.h
(749 B)
📄
ntpd.h
(20.67 KB)
📄
ntpsim.h
(3.85 KB)
📄
parse.h
(14.58 KB)
📄
parse_conf.h
(2.76 KB)
📄
rc_cmdlength.h
(83 B)
📄
recvbuff.h
(3.84 KB)
📄
refclock_atom.h
(449 B)
📄
refidsmear.h
(89 B)
📄
safecast.h
(1.04 KB)
📄
ssl_applink.c
(2.1 KB)
📄
timepps-SCO.h
(11.67 KB)
📄
timepps-Solaris.h
(13.24 KB)
📄
timepps-SunOS.h
(11.78 KB)
📄
timespecops.h
(4.82 KB)
📄
timetoa.h
(2.62 KB)
📄
timevalops.h
(8.33 KB)
📄
timexsup.h
(1.37 KB)
📄
trimble.h
(8.01 KB)
📄
vint64ops.h
(1.05 KB)
Editing: ntp_lists.h
/* * ntp_lists.h - linked lists common code * * SLIST: singly-linked lists * ========================== * * These macros implement a simple singly-linked list template. Both * the listhead and per-entry next fields are declared as pointers to * the list entry struct type. Initialization to NULL is typically * implicit (for globals and statics) or handled by zeroing of the * containing structure. * * The name of the next link field is passed as an argument to allow * membership in several lists at once using multiple next link fields. * * When possible, placing the link field first in the entry structure * allows slightly smaller code to be generated on some platforms. * * LINK_SLIST(listhead, pentry, nextlink) * add entry at head * * LINK_TAIL_SLIST(listhead, pentry, nextlink, entrytype) * add entry at tail. This is O(n), if this is a common * operation the FIFO template may be more appropriate. * * LINK_SORT_SLIST(listhead, pentry, beforecur, nextlink, entrytype) * add entry in sorted order. beforecur is an expression comparing * pentry with the current list entry. The current entry can be * referenced within beforecur as L_S_S_CUR(), which is short for * LINK_SORT_SLIST_CUR(). beforecur is nonzero if pentry sorts * before L_S_S_CUR(). * * UNLINK_HEAD_SLIST(punlinked, listhead, nextlink) * unlink first entry and point punlinked to it, or set punlinked * to NULL if the list is empty. * * UNLINK_SLIST(punlinked, listhead, ptounlink, nextlink, entrytype) * unlink entry pointed to by ptounlink. punlinked is set to NULL * if the entry is not found on the list, otherwise it is set to * ptounlink. * * UNLINK_EXPR_SLIST(punlinked, listhead, expr, nextlink, entrytype) * unlink entry where expression expr is nonzero. expr can refer * to the entry being tested using UNLINK_EXPR_SLIST_CURRENT(), * alias U_E_S_CUR(). See the implementation of UNLINK_SLIST() * below for an example. U_E_S_CUR() is NULL iff the list is empty. * punlinked is pointed to the removed entry or NULL if none * satisfy expr. * * FIFO: singly-linked lists plus tail pointer * =========================================== * * This is the same as FreeBSD's sys/queue.h STAILQ -- a singly-linked * list implementation with tail-pointer maintenance, so that adding * at the tail for first-in, first-out access is O(1). * * DECL_FIFO_ANCHOR(entrytype) * provides the type specification portion of the declaration for * a variable to refer to a FIFO queue (similar to listhead). The * anchor contains the head and indirect tail pointers. Example: * * #include "ntp_lists.h" * * typedef struct myentry_tag myentry; * struct myentry_tag { * myentry *next_link; * ... * }; * * DECL_FIFO_ANCHOR(myentry) my_fifo; * * void somefunc(myentry *pentry) * { * LINK_FIFO(my_fifo, pentry, next_link); * } * * If DECL_FIFO_ANCHOR is used with stack or heap storage, it * should be initialized to NULL pointers using a = { NULL }; * initializer or memset. * * HEAD_FIFO(anchor) * TAIL_FIFO(anchor) * Pointer to first/last entry, NULL if FIFO is empty. * * LINK_FIFO(anchor, pentry, nextlink) * add entry at tail. * * UNLINK_FIFO(punlinked, anchor, nextlink) * unlink head entry and point punlinked to it, or set punlinked * to NULL if the list is empty. * * CONCAT_FIFO(q1, q2, nextlink) * empty fifoq q2 moving its nodes to q1 following q1's existing * nodes. * * DLIST: doubly-linked lists * ========================== * * Elements on DLISTs always have non-NULL forward and back links, * because both link chains are circular. The beginning/end is marked * by the listhead, which is the same type as elements for simplicity. * An empty list's listhead has both links set to its own address. * * */ #ifndef NTP_LISTS_H #define NTP_LISTS_H #include "ntp_types.h" /* TRUE and FALSE */ #include "ntp_assert.h" #ifdef DEBUG # define NTP_DEBUG_LISTS_H #endif /* * If list debugging is not enabled, save a little time by not clearing * an entry's link pointer when it is unlinked, as the stale pointer * is harmless as long as it is ignored when the entry is not in a * list. */ #ifndef NTP_DEBUG_LISTS_H #define MAYBE_Z_LISTS(p) do { } while (FALSE) #else #define MAYBE_Z_LISTS(p) (p) = NULL #endif #define LINK_SLIST(listhead, pentry, nextlink) \ do { \ (pentry)->nextlink = (listhead); \ (listhead) = (pentry); \ } while (FALSE) #define LINK_TAIL_SLIST(listhead, pentry, nextlink, entrytype) \ do { \ entrytype **pptail; \ \ pptail = &(listhead); \ while (*pptail != NULL) \ pptail = &((*pptail)->nextlink); \ \ (pentry)->nextlink = NULL; \ *pptail = (pentry); \ } while (FALSE) #define LINK_SORT_SLIST_CURRENT() (*ppentry) #define L_S_S_CUR() LINK_SORT_SLIST_CURRENT() #define LINK_SORT_SLIST(listhead, pentry, beforecur, nextlink, \ entrytype) \ do { \ entrytype **ppentry; \ \ ppentry = &(listhead); \ while (TRUE) { \ if (NULL == *ppentry || (beforecur)) { \ (pentry)->nextlink = *ppentry; \ *ppentry = (pentry); \ break; \ } \ ppentry = &((*ppentry)->nextlink); \ if (NULL == *ppentry) { \ (pentry)->nextlink = NULL; \ *ppentry = (pentry); \ break; \ } \ } \ } while (FALSE) #define UNLINK_HEAD_SLIST(punlinked, listhead, nextlink) \ do { \ (punlinked) = (listhead); \ if (NULL != (punlinked)) { \ (listhead) = (punlinked)->nextlink; \ MAYBE_Z_LISTS((punlinked)->nextlink); \ } \ } while (FALSE) #define UNLINK_EXPR_SLIST_CURRENT() (*ppentry) #define U_E_S_CUR() UNLINK_EXPR_SLIST_CURRENT() #define UNLINK_EXPR_SLIST(punlinked, listhead, expr, nextlink, \ entrytype) \ do { \ entrytype **ppentry; \ \ ppentry = &(listhead); \ \ while (!(expr)) \ if (*ppentry != NULL && \ (*ppentry)->nextlink != NULL) { \ ppentry = &((*ppentry)->nextlink); \ } else { \ ppentry = NULL; \ break; \ } \ \ if (ppentry != NULL) { \ (punlinked) = *ppentry; \ *ppentry = (punlinked)->nextlink; \ MAYBE_Z_LISTS((punlinked)->nextlink); \ } else { \ (punlinked) = NULL; \ } \ } while (FALSE) #define UNLINK_SLIST(punlinked, listhead, ptounlink, nextlink, \ entrytype) \ UNLINK_EXPR_SLIST(punlinked, listhead, (ptounlink) == \ U_E_S_CUR(), nextlink, entrytype) #define CHECK_SLIST(listhead, nextlink, entrytype) \ do { \ entrytype *pentry; \ \ for (pentry = (listhead); \ pentry != NULL; \ pentry = pentry->nextlink) { \ INSIST(pentry != pentry->nextlink); \ INSIST((listhead) != pentry->nextlink); \ } \ } while (FALSE) /* * FIFO */ #define DECL_FIFO_ANCHOR(entrytype) \ struct { \ entrytype * phead; /* NULL if list empty */ \ entrytype ** pptail; /* NULL if list empty */ \ } #define HEAD_FIFO(anchor) ((anchor).phead) #define TAIL_FIFO(anchor) ((NULL == (anchor).pptail) \ ? NULL \ : *((anchor).pptail)) /* * For DEBUG builds only, verify both or neither of the anchor pointers * are NULL with each operation. */ #if !defined(NTP_DEBUG_LISTS_H) #define CHECK_FIFO_CONSISTENCY(anchor) do { } while (FALSE) #else #define CHECK_FIFO_CONSISTENCY(anchor) \ check_gen_fifo_consistency(&(anchor)) void check_gen_fifo_consistency(void *fifo); #endif /* * generic FIFO element used to access any FIFO where each element * begins with the link pointer */ typedef struct gen_node_tag gen_node; struct gen_node_tag { gen_node * link; }; /* generic FIFO */ typedef DECL_FIFO_ANCHOR(gen_node) gen_fifo; #define LINK_FIFO(anchor, pentry, nextlink) \ do { \ CHECK_FIFO_CONSISTENCY(anchor); \ \ (pentry)->nextlink = NULL; \ if (NULL != (anchor).pptail) { \ (*((anchor).pptail))->nextlink = (pentry); \ (anchor).pptail = \ &(*((anchor).pptail))->nextlink; \ } else { \ (anchor).phead = (pentry); \ (anchor).pptail = &(anchor).phead; \ } \ \ CHECK_FIFO_CONSISTENCY(anchor); \ } while (FALSE) #define UNLINK_FIFO(punlinked, anchor, nextlink) \ do { \ CHECK_FIFO_CONSISTENCY(anchor); \ \ (punlinked) = (anchor).phead; \ if (NULL != (punlinked)) { \ (anchor).phead = (punlinked)->nextlink; \ if (NULL == (anchor).phead) \ (anchor).pptail = NULL; \ else if ((anchor).pptail == \ &(punlinked)->nextlink) \ (anchor).pptail = &(anchor).phead; \ MAYBE_Z_LISTS((punlinked)->nextlink); \ CHECK_FIFO_CONSISTENCY(anchor); \ } \ } while (FALSE) #define UNLINK_MID_FIFO(punlinked, anchor, tounlink, nextlink, \ entrytype) \ do { \ entrytype **ppentry; \ \ CHECK_FIFO_CONSISTENCY(anchor); \ \ ppentry = &(anchor).phead; \ \ while ((tounlink) != *ppentry) \ if ((*ppentry)->nextlink != NULL) { \ ppentry = &((*ppentry)->nextlink); \ } else { \ ppentry = NULL; \ break; \ } \ \ if (ppentry != NULL) { \ (punlinked) = *ppentry; \ *ppentry = (punlinked)->nextlink; \ if (NULL == *ppentry) \ (anchor).pptail = NULL; \ else if ((anchor).pptail == \ &(punlinked)->nextlink) \ (anchor).pptail = &(anchor).phead; \ MAYBE_Z_LISTS((punlinked)->nextlink); \ CHECK_FIFO_CONSISTENCY(anchor); \ } else { \ (punlinked) = NULL; \ } \ } while (FALSE) #define CONCAT_FIFO(f1, f2, nextlink) \ do { \ CHECK_FIFO_CONSISTENCY(f1); \ CHECK_FIFO_CONSISTENCY(f2); \ \ if ((f2).pptail != NULL) { \ if ((f1).pptail != NULL) { \ (*(f1).pptail)->nextlink = (f2).phead; \ if ((f2).pptail == &(f2).phead) \ (f1).pptail = \ &(*(f1).pptail)->nextlink; \ else \ (f1).pptail = (f2).pptail; \ CHECK_FIFO_CONSISTENCY(f1); \ } else { \ (f1) = (f2); \ } \ MAYBE_Z_LISTS((f2).phead); \ MAYBE_Z_LISTS((f2).pptail); \ } \ } while (FALSE) /* * DLIST */ #define DECL_DLIST_LINK(entrytype, link) \ struct { \ entrytype * b; \ entrytype * f; \ } link #define INIT_DLIST(listhead, link) \ do { \ (listhead).link.f = &(listhead); \ (listhead).link.b = &(listhead); \ } while (FALSE) #define HEAD_DLIST(listhead, link) \ ( \ (&(listhead) != (listhead).link.f) \ ? (listhead).link.f \ : NULL \ ) #define TAIL_DLIST(listhead, link) \ ( \ (&(listhead) != (listhead).link.b) \ ? (listhead).link.b \ : NULL \ ) #define NEXT_DLIST(listhead, entry, link) \ ( \ (&(listhead) != (entry)->link.f) \ ? (entry)->link.f \ : NULL \ ) #define PREV_DLIST(listhead, entry, link) \ ( \ (&(listhead) != (entry)->link.b) \ ? (entry)->link.b \ : NULL \ ) #define LINK_DLIST(listhead, pentry, link) \ do { \ (pentry)->link.f = (listhead).link.f; \ (pentry)->link.b = &(listhead); \ (listhead).link.f->link.b = (pentry); \ (listhead).link.f = (pentry); \ } while (FALSE) #define LINK_TAIL_DLIST(listhead, pentry, link) \ do { \ (pentry)->link.b = (listhead).link.b; \ (pentry)->link.f = &(listhead); \ (listhead).link.b->link.f = (pentry); \ (listhead).link.b = (pentry); \ } while (FALSE) #define UNLINK_DLIST(ptounlink, link) \ do { \ (ptounlink)->link.b->link.f = (ptounlink)->link.f; \ (ptounlink)->link.f->link.b = (ptounlink)->link.b; \ MAYBE_Z_LISTS((ptounlink)->link.b); \ MAYBE_Z_LISTS((ptounlink)->link.f); \ } while (FALSE) #define ITER_DLIST_BEGIN(listhead, iter, link, entrytype) \ { \ entrytype *i_dl_nextiter; \ \ for ((iter) = (listhead).link.f; \ (iter) != &(listhead) \ && ((i_dl_nextiter = (iter)->link.f), TRUE); \ (iter) = i_dl_nextiter) { #define ITER_DLIST_END() \ } \ } #define REV_ITER_DLIST_BEGIN(listhead, iter, link, entrytype) \ { \ entrytype *i_dl_nextiter; \ \ for ((iter) = (listhead).link.b; \ (iter) != &(listhead) \ && ((i_dl_nextiter = (iter)->link.b), TRUE); \ (iter) = i_dl_nextiter) { #define REV_ITER_DLIST_END() \ } \ } #endif /* NTP_LISTS_H */
Upload File
Create Folder