Lines Matching defs:rb
53 ringbuf_free(struct ringbuf *rb)
55 free(rb->buf);
56 free(rb);
61 ringbuf_clear(struct ringbuf *rb)
63 rb->start = rb->end = 0;
68 ringbuf_used(struct ringbuf *rb)
70 return ((rb->len + rb->end - rb->start) % rb->len);
78 ringbuf_append_line(struct ringbuf *rb, char *line)
83 if (rb == NULL || line == NULL)
93 if (llen >= rb->len)
101 used = ringbuf_used(rb);
102 if (used + llen >= rb->len) {
103 rb->start = (rb->start + used + llen - rb->len) % rb->len;
106 while (rb->buf[rb->start] != '\n')
107 rb->start = (rb->start + 1) % rb->len;
109 rb->start = (rb->start + 1) % rb->len;
118 if (rb->end + llen > rb->len) {
119 copy_len = rb->len - rb->end;
120 memcpy(rb->buf + rb->end, line, copy_len);
121 memcpy(rb->buf, line + copy_len, llen - copy_len - 1);
122 rb->buf[llen - copy_len - 1] = '\n';
124 memcpy(rb->buf + rb->end, line, llen - 1);
125 rb->buf[rb->end + llen - 1] = '\n';
128 rb->end = (rb->end + llen) % rb->len;
137 ringbuf_to_string(char *buf, size_t len, struct ringbuf *rb)
141 if (buf == NULL || rb == NULL || len == 0)
144 copy_len = MINIMUM(len - 1, ringbuf_used(rb));
149 if (rb->start < rb->end)
150 memcpy(buf, rb->buf + rb->start, copy_len);
153 n = rb->len - rb->start;
154 memcpy(buf, rb->buf + rb->start, MINIMUM(n, copy_len));
156 memcpy(buf + n, rb->buf,
157 MINIMUM(rb->end, copy_len - n));
161 return (ringbuf_used(rb));