xref: /OK3568_Linux_fs/app/forlinx/quectelCM/util.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /**
2   @file
3   util.h
4 
5   @brief
6   This file provides the definitions, and declares some common APIs for list-algorithm.
7 
8  */
9 
10 #ifndef _UTILS_H_
11 #define _UTILS_H_
12 
13 #include <stddef.h>
14 #include <glob.h>
15 
16 struct listnode
17 {
18     struct listnode *next;
19     struct listnode *prev;
20 };
21 
22 #define node_to_item(node, container, member) \
23     (container *) (((char*) (node)) - offsetof(container, member))
24 
25 #define list_declare(name) \
26     struct listnode name = { \
27         .next = &name, \
28         .prev = &name, \
29     }
30 
31 #define list_for_each(node, list) \
32     for (node = (list)->next; node != (list); node = node->next)
33 
34 #define list_for_each_reverse(node, list) \
35     for (node = (list)->prev; node != (list); node = node->prev)
36 
37 void list_init(struct listnode *list);
38 void list_add_tail(struct listnode *list, struct listnode *item);
39 void list_add_head(struct listnode *head, struct listnode *item);
40 void list_remove(struct listnode *item);
41 
42 #define list_empty(list) ((list) == (list)->next)
43 #define list_head(list) ((list)->next)
44 #define list_tail(list) ((list)->prev)
45 
46 int epoll_register(int  epoll_fd, int  fd, unsigned int events);
47 int epoll_deregister(int  epoll_fd, int  fd);
48 const char * get_time(void);
49 unsigned long clock_msec(void);
50 pid_t getpid_by_pdp(int, const char*);
51 
52 #endif
53