📄 ul_msg_buf.c
字号:
#include <stdlib.h>#include <string.h>#include <ul_msg_buf.h>intul_msg_buf_init(ul_msg_buf_t *buf){ memset(buf,0,sizeof(ul_msg_buf_t)); ul_dbuff_init(&buf->data, 0); return 0;}voidul_msg_buf_destroy(ul_msg_buf_t *buf){ ul_msg_buf_t *tail; buf->msginfo.len=0; buf->msginfo.flg=0; ul_dbuff_destroy(&buf->data); tail=buf->tail; buf->tail=0; while(tail){ buf=tail; tail=buf->tail; ul_dbuff_destroy(&buf->data); free(buf); }}intul_msg_buf_rd_data(ul_msg_buf_t *buf, ul_fd_t ul_fd){ ssize_t len, rd_len; len=buf->msginfo.len; if (ul_dbuff_prep(&buf->data,len)<len) return -1; if(!len) return 0; rd_len=ul_read(ul_fd,buf->data.data, len); if(rd_len!=len) return -1; return rd_len;}intul_msg_buf_rd_rest(ul_msg_buf_t *buf, ul_fd_t ul_fd){ int frames=0; ul_msg_buf_t *tail; do{ if(buf->msginfo.len) if(ul_msg_buf_rd_data(buf,ul_fd)<0) break; frames++; if(!(buf->msginfo.flg&UL_BFL_TAIL)){ ul_freemsg(ul_fd); return frames; } if(!(tail=malloc(sizeof(ul_msg_buf_t)))) break; ul_msg_buf_init(tail); if(ul_actailmsg(ul_fd,&tail->msginfo)<0) { ul_msg_buf_destroy(tail); free(tail); break; } buf->tail=tail; buf=tail; }while(1); ul_freemsg(ul_fd); return -1;}intul_msg_buf_wr(ul_msg_buf_t *buf, ul_fd_t ul_fd){ int l; if (!buf) return -1; l=buf->msginfo.len; buf->msginfo.len=0; if (ul_newmsg(ul_fd,&buf->msginfo)<0) return -1; do{ if (ul_write(ul_fd,buf->data.data,l)!=l) break; if(!(buf->msginfo.flg&UL_BFL_TAIL)){ return ul_freemsg(ul_fd); } buf=buf->tail; l=buf->msginfo.len; buf->msginfo.len=0; if(ul_tailmsg(ul_fd,&buf->msginfo)<0) break; }while(1); ul_abortmsg(ul_fd); return -1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -