Lines Matching refs:mb
69 static void memio_buffer_new(struct memio_buffer *mb, int size);
72 static void memio_buffer_destroy(struct memio_buffer *mb);
75 static int memio_buffer_used_contiguous(const struct memio_buffer *mb);
78 static int memio_buffer_wrapped_bytes(const struct memio_buffer *mb);
81 static int memio_buffer_unused_contiguous(const struct memio_buffer *mb);
84 static int memio_buffer_put(struct memio_buffer *mb, const char *buf, int n);
87 static int memio_buffer_get(struct memio_buffer *mb, char *buf, int n);
90 static void memio_buffer_new(struct memio_buffer *mb, int size)
92 mb->head = 0;
93 mb->tail = 0;
94 mb->bufsize = size;
95 mb->buf = malloc(size);
99 static void memio_buffer_destroy(struct memio_buffer *mb)
101 free(mb->buf);
102 mb->buf = NULL;
103 mb->bufsize = 0;
104 mb->head = 0;
105 mb->tail = 0;
109 static int memio_buffer_used_contiguous(const struct memio_buffer *mb)
111 return (((mb->tail >= mb->head) ? mb->tail : mb->bufsize) - mb->head);
115 static int memio_buffer_wrapped_bytes(const struct memio_buffer *mb)
117 return (mb->tail >= mb->head) ? 0 : mb->tail;
121 static int memio_buffer_unused_contiguous(const struct memio_buffer *mb)
123 if (mb->head > mb->tail) return mb->head - mb->tail - 1;
124 return mb->bufsize - mb->tail - (mb->head == 0);
128 static int memio_buffer_put(struct memio_buffer *mb, const char *buf, int n)
134 len = PR_MIN(n, memio_buffer_unused_contiguous(mb));
137 memcpy(&mb->buf[mb->tail], buf, len);
138 mb->tail += len;
139 if (mb->tail == mb->bufsize)
140 mb->tail = 0;
146 len = PR_MIN(n, memio_buffer_unused_contiguous(mb));
149 memcpy(&mb->buf[mb->tail], buf, len);
150 mb->tail += len;
151 if (mb->tail == mb->bufsize)
152 mb->tail = 0;
162 static int memio_buffer_get(struct memio_buffer *mb, char *buf, int n)
168 len = PR_MIN(n, memio_buffer_used_contiguous(mb));
170 memcpy(buf, &mb->buf[mb->head], len);
171 mb->head += len;
172 if (mb->head == mb->bufsize)
173 mb->head = 0;
179 len = PR_MIN(n, memio_buffer_used_contiguous(mb));
181 memcpy(buf, &mb->buf[mb->head], len);
182 mb->head += len;
183 if (mb->head == mb->bufsize)
184 mb->head = 0;
218 struct memio_buffer *mb;
227 mb = &secret->readbuf;
228 PR_ASSERT(mb->bufsize);
229 rv = memio_buffer_get(mb, buf, len);
239 if (mb->last_err)
240 PR_SetError(mb->last_err, 0);
262 struct memio_buffer *mb;
266 mb = &secret->writebuf;
267 PR_ASSERT(mb->bufsize);
274 if (mb->last_err) {
275 PR_SetError(mb->last_err, 0);
278 rv = memio_buffer_put(mb, buf, len);
413 struct memio_buffer* mb = &((PRFilePrivate *)secret)->readbuf;
414 PR_ASSERT(mb->bufsize);
416 *buf = &mb->buf[mb->tail];
417 return memio_buffer_unused_contiguous(mb);
422 struct memio_buffer* mb = &((PRFilePrivate *)secret)->readbuf;
423 PR_ASSERT(mb->bufsize);
425 return memio_buffer_used_contiguous(mb);
430 struct memio_buffer* mb = &((PRFilePrivate *)secret)->readbuf;
431 PR_ASSERT(mb->bufsize);
434 mb->tail += bytes_read;
435 if (mb->tail == mb->bufsize)
436 mb->tail = 0;
441 mb->last_err = bytes_read;
449 struct memio_buffer* mb = &((PRFilePrivate *)secret)->writebuf;
450 PR_ASSERT(mb->bufsize);
452 if (mb->last_err)
453 return mb->last_err;
455 *buf1 = &mb->buf[mb->head];
456 *len1 = memio_buffer_used_contiguous(mb);
457 *buf2 = mb->buf;
458 *len2 = memio_buffer_wrapped_bytes(mb);
464 struct memio_buffer* mb = &((PRFilePrivate *)secret)->writebuf;
465 PR_ASSERT(mb->bufsize);
468 mb->head += bytes_written;
469 if (mb->head >= mb->bufsize)
470 mb->head -= mb->bufsize;
472 mb->last_err = bytes_written;
494 struct memio_buffer mb;
498 memio_buffer_new(&mb, TEST_BUFLEN);
500 CHECKEQ(memio_buffer_unused_contiguous(&mb), TEST_BUFLEN-1);
501 CHECKEQ(memio_buffer_used_contiguous(&mb), 0);
503 CHECKEQ(memio_buffer_put(&mb, "howdy", 5), 5);
505 CHECKEQ(memio_buffer_unused_contiguous(&mb), TEST_BUFLEN-1-5);
506 CHECKEQ(memio_buffer_used_contiguous(&mb), 5);
507 CHECKEQ(memio_buffer_wrapped_bytes(&mb), 0);
509 CHECKEQ(memio_buffer_put(&mb, "!", 1), 1);
511 CHECKEQ(memio_buffer_unused_contiguous(&mb), 0);
512 CHECKEQ(memio_buffer_used_contiguous(&mb), 6);
513 CHECKEQ(memio_buffer_wrapped_bytes(&mb), 0);
515 CHECKEQ(memio_buffer_get(&mb, buf, 6), 6);
518 CHECKEQ(memio_buffer_unused_contiguous(&mb), 1);
519 CHECKEQ(memio_buffer_used_contiguous(&mb), 0);
521 CHECKEQ(memio_buffer_put(&mb, "01234", 5), 5);
523 CHECKEQ(memio_buffer_used_contiguous(&mb), 1);
524 CHECKEQ(memio_buffer_wrapped_bytes(&mb), 4);
525 CHECKEQ(memio_buffer_unused_contiguous(&mb), TEST_BUFLEN-1-5);
527 CHECKEQ(memio_buffer_put(&mb, "5", 1), 1);
529 CHECKEQ(memio_buffer_unused_contiguous(&mb), 0);
530 CHECKEQ(memio_buffer_used_contiguous(&mb), 1);