blob: f7f685fd0aeed75a145a414cf325094edd9f053b [file] [log] [blame]
adamdunkels56807862004-08-09 20:50:11 +00001
2#include "uipbuf.h"
3
4#include <string.h>
5
6/*---------------------------------------------------------------------------*/
7void
8uipbuf_setup(struct uipbuf_buffer *buf,
9 u8_t *bufptr, u16_t bufsize)
10{
11 buf->buffer = buf->ptr = bufptr;
12 buf->bufsize = buf->left = bufsize;
13}
14/*---------------------------------------------------------------------------*/
15u8_t
16uipbuf_bufdata(struct uipbuf_buffer *buf, u16_t len,
17 u8_t **dataptr, u16_t *datalen)
18{
19 if(*datalen < buf->left) {
20 memcpy(buf->ptr, *dataptr, *datalen);
21 buf->ptr += *datalen;
22 buf->left -= *datalen;
23 *dataptr += *datalen;
24 *datalen = 0;
25 return UIPBUF_NOT_FULL;
26 } else if(*datalen == buf->left) {
27 memcpy(buf->ptr, *dataptr, *datalen);
28 buf->ptr += *datalen;
29 buf->left = 0;
30 *dataptr += *datalen;
31 *datalen = 0;
32 return UIPBUF_FULL;
33 } else {
34 memcpy(buf->ptr, *dataptr, buf->left);
35 buf->ptr += buf->left;
36 *datalen -= buf->left;
37 *dataptr += buf->left;
38 buf->left = 0;
39 return UIPBUF_FULL;
40 }
41
42}
43/*---------------------------------------------------------------------------*/
44u8_t
45uipbuf_bufdata_endmarker(struct uipbuf_buffer *buf, u8_t endmarker,
46 u8_t **dataptr, u16_t *datalen)
47{
48 u8_t c;
49
50 while(buf->left > 0 && *datalen > 0) {
51 c = *buf->ptr = **dataptr;
52 ++*dataptr;
53 ++buf->ptr;
54 --*datalen;
55 --buf->left;
56
57 if(c == endmarker) {
58 return UIPBUF_FOUND;
59 }
60 }
61
62 if(*datalen == 0) {
63 return UIPBUF_NOT_FOUND;
64 }
65
66 while(*datalen > 0) {
adamdunkels5c22b922004-08-11 21:25:30 +000067 c = **dataptr;
adamdunkels56807862004-08-09 20:50:11 +000068 --*datalen;
69 ++*dataptr;
adamdunkels5c22b922004-08-11 21:25:30 +000070
71 if(c == endmarker) {
72 return UIPBUF_FOUND | UIPBUF_FULL;
73 }
adamdunkels56807862004-08-09 20:50:11 +000074 }
75
76 return UIPBUF_FULL;
77}
78/*----------------------------------------------------------------------------*/u16_t
79uipbuf_len(struct uipbuf_buffer *buf)
80{
81 return buf->bufsize - buf->left;
82}
83/*----------------------------------------------------------------------------*/