File: buffer.h

package info (click to toggle)
tlswrapper 0~20230101-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,784 kB
  • sloc: ansic: 7,085; sh: 2,247; makefile: 220
file content (47 lines) | stat: -rw-r--r-- 1,536 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#ifndef _BUFFER_H____
#define _BUFFER_H____

typedef struct buffer {
    char *x;
    long long p;
    long long n;
    int fd;
    long long (*op)(int, void *, long long);
} buffer;

#define BUFFER_INSIZE 8192
#define BUFFER_OUTSIZE 8192

/* init */
extern void buffer_init(buffer *, long long (*)(int, void *, long long), int,
                        void *, long long);
#define buffer_INIT(op, fd, buf, len)                                          \
    { (buf), 0, (len), (fd), (op) }

/* write */
extern long long buffer_write(int, void *, long long);
extern int buffer_flush(buffer *);
extern int buffer_put(buffer *, const void *, long long);
extern int buffer_puts(buffer *, const char *);
extern int buffer_putflush(buffer *, const void *, long long);
extern int buffer_putsflush(buffer *, const char *);

#define buffer_PUTC(s, c)                                                      \
    (((s)->n != (s)->p) ? ((s)->x[(s)->p++] = (c), 0)                          \
                        : buffer_put((s), &(c), 1))

/* read */
extern long long buffer_read(int, void *, long long);
extern long long buffer_get(buffer *, void *, long long);

#define buffer_PEEK(s) ((s)->x + (s)->n)
#define buffer_SEEK(s, len) (((s)->p -= (len)), ((s)->n += (len)))

#define buffer_GETC(s, ch)                                                     \
    (((s)->p > 0) ? (*(ch) = (s)->x[(s)->n], buffer_SEEK((s), 1), 1)           \
                  : buffer_get((s), (ch), 1))

/* copy */
extern int buffer_copy(buffer *, buffer *);

#endif