⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buf.h

📁 操作系统源代码
💻 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 + -