buffer.h
1 /*
2  This file is part of Pretty Curved Privacy (pcp1).
3 
4  Copyright (C) 2013-2015 T.v.Dein.
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19  You can contact me by mail: <tom AT vondein DOT org>.
20 */
21 
22 #ifndef HAVE_PCP_BUFFER_H
23 #define HAVE_PCP_BUFFER_H
24 
25 #include <stdio.h>
26 #include <stdarg.h>
27 #include "mem.h"
28 #include "util.h"
29 #include "defines.h"
30 #include "structs.h"
31 #include "context.h"
32 
62 Buffer *buffer_new(size_t blocksize, char *name);
63 
73 Buffer *buffer_new_str(char *name);
74 
75 
142 Buffer *buffer_new_buf(char *name, void *data, size_t datasize);
143 
144 /* initialize buffer vars */
145 void buffer_init(Buffer *b, size_t blocksize, char *name);
146 
155 void buffer_free(Buffer *b);
156 
165 void buffer_clear(Buffer *b);
166 
174 void buffer_rewind(Buffer *b);
175 
190 void buffer_add(Buffer *b, const void *data, size_t len);
191 
204 void buffer_add_buf(Buffer *dst, Buffer *src);
205 
226 void buffer_add_str(Buffer *b, const char * fmt, ...);
227 
243 void buffer_add_hex(Buffer *b, void *data, size_t len);
244 
245 /* resize the buffer if necessary, used internally only */
246 void buffer_resize(Buffer *b, size_t len);
247 
257 int buffer_done(Buffer *b);
258 
287 size_t buffer_get_chunk(Buffer *b, void *buf, size_t len);
288 
300 size_t buffer_get_chunk_tobuf(Buffer *b, Buffer *dst, size_t len);
301 
316 byte *buffer_get(Buffer *b);
317 
342 char *buffer_get_str(Buffer *b);
343 
378 byte *buffer_get_remainder(Buffer *b);
379 
415 size_t buffer_extract(Buffer *b, void *buf, size_t offset, size_t len);
416 
426 size_t buffer_fwd_offset(Buffer *b, size_t fwdby);
427 
432 void buffer_dump(const Buffer *b);
433 
438 void buffer_info(const Buffer *b);
439 
450 size_t buffer_size(const Buffer *b);
451 
480 size_t buffer_left(const Buffer *b);
481 
488 uint8_t buffer_get8(Buffer *b);
489 
496 uint16_t buffer_get16(Buffer *b);
497 
504 uint32_t buffer_get32(Buffer *b);
505 
512 uint64_t buffer_get64(Buffer *b);
513 
520 uint16_t buffer_get16na(Buffer *b);
521 
528 uint32_t buffer_get32na(Buffer *b);
529 
536 uint64_t buffer_get64na(Buffer *b);
537 
546 uint8_t buffer_last8(Buffer *b);
547 
556 uint16_t buffer_last16(Buffer *b);
557 
566 uint32_t buffer_last32(Buffer *b);
567 
576 uint64_t buffer_last64(Buffer *b);
577 
593 size_t buffer_fd_read(Buffer *b, FILE *in, size_t len);
594 
601 void buffer_add8(Buffer *b, uint8_t v);
602 
609 void buffer_add16(Buffer *b, uint16_t v);
610 
617 void buffer_add32(Buffer *b, uint32_t v);
618 
625 void buffer_add64(Buffer *b, uint64_t v);
626 
633 void buffer_add16be(Buffer *b, uint16_t v);
634 
641 void buffer_add32be(Buffer *b, uint32_t v);
642 
649 void buffer_add64be(Buffer *b, uint64_t v);
650 
651 
652 #endif // HAVE_PCP_BUFFER_H
653