更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_seq_buf.c 文件参考

浏览源代码.

函数

static int ExpandSeqBuf (struct SeqBuf *seqBuf, size_t oldCount)
 
struct SeqBufLosBufCreat (void)
 创建seq buf 更多...
 
int LosBufVprintf (struct SeqBuf *seqBuf, const char *fmt, va_list argList)
 真正写 buf 函数,调整 size/count的值,count可理解为偏移位 更多...
 
int LosBufPrintf (struct SeqBuf *seqBuf, const char *fmt,...)
 支持可变参数 写 buf 更多...
 
int LosBufRelease (struct SeqBuf *seqBuf)
 释放 seq buf 更多...
 

函数说明

◆ ExpandSeqBuf()

static int ExpandSeqBuf ( struct SeqBuf seqBuf,
size_t  oldCount 
)
static

在文件 los_seq_buf.c37 行定义.

38{
39 char *newBuf = NULL;
40 int ret;
41
42 if ((seqBuf == NULL) || (seqBuf->buf == NULL)) {
43 return -LOS_NOK;
44 }
45
46 if (seqBuf->size >= SEQBUF_LIMIT_SIZE) {
47 goto EXPAND_FAILED;
48 }
49
50 newBuf = (char*)malloc(seqBuf->size <<= 1);//将现有buf扩大一倍
51 if (newBuf == NULL) {
52 goto EXPAND_FAILED;
53 }
54 (void)memset_s(newBuf + oldCount, seqBuf->size - oldCount, 0, seqBuf->size - oldCount);
55 //memset_s 注意 oldCount 位置,因为 newBuf头部要被旧buf覆盖,所以只set后部分
56 ret = memcpy_s(newBuf, seqBuf->size, seqBuf->buf, oldCount);//拷贝旧buf数据到新buf,注意 oldCount 位置
57 if (ret != LOS_OK) {
58 free(newBuf);
59 goto EXPAND_FAILED;
60 }
61 seqBuf->count = oldCount;//目前偏移量,可理解为seek
62
63 free(seqBuf->buf);//释放原有的buf
64 seqBuf->buf = newBuf;//采用新的buf
65
66 return LOS_OK;
67EXPAND_FAILED:
68 free(seqBuf->buf);
69 seqBuf->buf = NULL;
70 seqBuf->count = 0;
71 seqBuf->size = 0;
72
73 return -LOS_NOK;
74}
void * malloc(size_t size)
动态分配内存块大小
Definition: malloc.c:81
void free(void *ptr)
释放ptr所指向的内存空间
Definition: malloc.c:66
size_t size
Definition: los_seq_buf.h:50
char * buf
Definition: los_seq_buf.h:49
size_t count
Definition: los_seq_buf.h:51
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 void
函数调用图:
这是这个函数的调用关系图:

◆ LosBufCreat()

struct SeqBuf * LosBufCreat ( void  )

创建seq buf

在文件 los_seq_buf.c76 行定义.

77{
78 struct SeqBuf *seqBuf = NULL;
79
80 seqBuf = (struct SeqBuf *)malloc(sizeof(struct SeqBuf));
81 if (seqBuf == NULL) {
82 errno = -LOS_ENOMEM;
83 return NULL;
84 }
85 (void)memset_s(seqBuf, sizeof(struct SeqBuf), 0, sizeof(struct SeqBuf));
86
87 return seqBuf;
88}
函数调用图:
这是这个函数的调用关系图:

◆ LosBufPrintf()

int LosBufPrintf ( struct SeqBuf seqBuf,
const char *  fmt,
  ... 
)

支持可变参数 写 buf

在文件 los_seq_buf.c133 行定义.

134{
135 va_list argList;
136 int ret;
137
138 va_start(argList, fmt);//可变参数的实现,有点意思.
139 ret = LosBufVprintf(seqBuf, fmt, argList);
140 va_end(argList);
141
142 return ret;
143}
int LosBufVprintf(struct SeqBuf *seqBuf, const char *fmt, va_list argList)
真正写 buf 函数,调整 size/count的值,count可理解为偏移位
Definition: los_seq_buf.c:90
函数调用图:
这是这个函数的调用关系图:

◆ LosBufRelease()

int LosBufRelease ( struct SeqBuf seqBuf)

释放 seq buf

在文件 los_seq_buf.c145 行定义.

146{
147 if (seqBuf == NULL) {
148 return -LOS_EPERM;
149 }
150
151 if (seqBuf->buf != NULL) {
152 free(seqBuf->buf);
153 seqBuf->buf = NULL;
154 }
155 free(seqBuf);
156
157 return LOS_OK;
158}
函数调用图:
这是这个函数的调用关系图:

◆ LosBufVprintf()

int LosBufVprintf ( struct SeqBuf seqBuf,
const char *  fmt,
va_list  argList 
)

真正写 buf 函数,调整 size/count的值,count可理解为偏移位

在文件 los_seq_buf.c90 行定义.

91{
92 bool needreprintf = FALSE;
93 int bufLen;
94
95 if (seqBuf == NULL) {
96 return -LOS_EPERM;
97 }
98
99 if (seqBuf->buf == NULL) {
100 seqBuf->size = SEQBUF_PAGE_SIZE;
101 seqBuf->buf = (char *)malloc(seqBuf->size);
102 if (seqBuf->buf == NULL) {
103 return -LOS_ENOMEM;
104 }
105 (void)memset_s(seqBuf->buf, seqBuf->size, 0, seqBuf->size);
106 seqBuf->count = 0;
107 }
108
109 do {
110 bufLen = vsnprintf_s(seqBuf->buf + seqBuf->count, seqBuf->size - seqBuf->count,
111 seqBuf->size - seqBuf->count - 1, fmt, argList);
112 if (bufLen >= 0) {
113 /* succeed write. */
114 seqBuf->count += bufLen;//成功写入,count要增长
115 return 0;
116 }
117 if (seqBuf->buf[seqBuf->count] == '\0') {//这里没看懂,为啥要有这个判断, @note_thinking
118 free(seqBuf->buf);
119 seqBuf->buf = NULL;
120 break;
121 }
122
123 needreprintf = TRUE;
124
125 if (ExpandSeqBuf(seqBuf, seqBuf->count) != 0) {
126 break;
127 }
128 } while (needreprintf);
129
130 return -LOS_NOK;
131}
static int ExpandSeqBuf(struct SeqBuf *seqBuf, size_t oldCount)
Definition: los_seq_buf.c:37
函数调用图:
这是这个函数的调用关系图: