?? buf.h
字號:
/*buf.h*/#ifndef BUF_H#define BUF_H#ifndef BUF_S#define BUF_S 32768#endif#define MAX_BUFREQ_PRI 10#define ETH_PRI_PORTBUFS 3#define ETH_PRI_EXP_FDBUFS 4#define ETH_PRI_FDBUFS 5#define ICMP_PRI_QUEUE 1#define TCP_PRI_FRAG2SEND 4#define TCP_PRI_CONNwoUSER 6#define TCP_PRI_CONN_INUSE 9#define UDP_PRI_EXP_FDBUFS 5#define UDP_PRI_FDBUFS 6struct buf;typedef void (*buffree_t) ARGS(( struct buf *buffer ));typedef void (*bf_freereq_t) ARGS(( int priority, size_t reqsize ));typedef struct buf{ int buf_linkC; void *buf_next; buffree_t buf_free; size_t buf_size; char *buf_data_p;} buf_t;typedef struct acc{ int acc_linkC; int acc_offset, acc_length; buf_t *acc_buffer; struct acc *acc_next, *acc_ext_link;} acc_t;extern size_t bf_free_buffsize;extern acc_t *bf_temporary_acc;/* For debugging... */#if DEBUG & 256#define bf_memreq(a) (bf_memreq_file= __FILE__, bf_memreq_line= __LINE__, \ _bf_memreq(a))#endif#if DEBUG & 256#define bf_cut(a,b,c) (bf_cut_file= __FILE__, bf_cut_line= __LINE__, \ _bf_cut(a,b,c))#endif#if DEBUG & 256#define bf_packIffLess(a,b) (bf_pack_file= __FILE__, bf_pack_line= __LINE__, \ _bf_packIffLess(a,b))#endif#if DEBUG & 256#define bf_bufsize(a) (bf_bufsize_file= __FILE__, bf_bufsize_line= __LINE__, \ _bf_bufsize(a))#endif#ifdef bf_memreqextern char *bf_memreq_file;extern int bf_memreq_line;#endif#ifdef bf_cutextern char *bf_cut_file;extern int bf_cut_line;#endif#ifdef bf_packIffLessextern char *bf_pack_file;extern int bf_pack_line;#endif#ifdef bf_bufsizeextern char *bf_bufsize_file;extern int bf_bufsize_line;#endif/* Prototypes */void bf_init ARGS(( void ));void bf_logon ARGS(( bf_freereq_t func ));#ifndef bf_memreqacc_t *bf_memreq ARGS(( unsigned size));#elseacc_t *_bf_memreq ARGS(( unsigned size));#endif/* the result is an acc with linkC == 1 */acc_t *bf_dupacc ARGS(( acc_t *acc ));/* the result is an acc with linkC == 1 identical to the given one */void bf_afree ARGS(( acc_t *acc));/* this reduces the linkC off the given acc with one */acc_t *bf_pack ARGS(( acc_t *pack));/* this gives a packed copy of the given acc, the linkC of the given acc is reduced by one, the linkC of the result == 1 */#ifndef bf_packIffLessacc_t *bf_packIffLess ARGS(( acc_t *pack, int min_len ));#elseacc_t *_bf_packIffLess ARGS(( acc_t *pack, int min_len ));#endif/* this performs a bf_pack iff pack->acc_length<min_len */#ifndef bf_bufsizesize_t bf_bufsize ARGS(( acc_t *pack));#elsesize_t _bf_bufsize ARGS(( acc_t *pack));#endif/* this gives the length of the buffer specified by the given acc. The linkC of the given acc remains the same */#ifndef bf_cutacc_t *bf_cut ARGS(( acc_t *data, unsigned offset, unsigned length ));#elseacc_t *_bf_cut ARGS(( acc_t *data, unsigned offset, unsigned length ));#endif/* the result is a cut of the buffer from offset with length length. The linkC of the result == 1, the linkC of the given acc remains the same. */acc_t *bf_append ARGS(( acc_t *data_first, acc_t *data_second ));/* data_second is appended after data_first, a link is returned to the result and the linkCs of data_first and data_second are reduced. further more, if the contents of the last part of data_first and the first part of data_second fit in a buffer, both parts are copied into a (possibly fresh) buffer*/#define ptr2acc_data(/* acc_t * */ a) (bf_temporary_acc=(a), \ (&bf_temporary_acc->acc_buffer->buf_data_p[bf_temporary_acc-> \ acc_offset]))#define bf_chkbuf(buf) ((buf)? (assert((buf)->acc_linkC>0), \ assert((buf)->acc_buffer), \ assert((buf)->acc_buffer->buf_linkC>0)) : 0)void bf_check_all_bufs ARGS(( void ));/* try to get all buffers back for debug purposes */#endif /* BUF_H */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -