summaryrefslogtreecommitdiff
path: root/src/buffer.c
blob: 2fbfe72cfd9624ffd6d1cc7f665ec3bfe4374dac (plain)
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
#include "buffer.h"
#include <string.h>
#include <malloc.h>

bool init_growable_buffer(growable_buffer *buffer) {
    buffer->size = GROW_SIZE;
    buffer->used = 0;
    buffer->content = malloc(GROW_SIZE);
    if (!buffer->content) {
        return false;
    }
    return true;
}

bool grow_growable_buffer(growable_buffer *buffer, size_t at_least) {
    size_t new_size = ((at_least % GROW_SIZE) + 1 ) * GROW_SIZE;
    if (new_size < buffer->size){
        buffer->content = realloc(buffer->content, new_size);
        if (!buffer->content){
            return false;
        }
        buffer->size = new_size;
        return true;
    }
}

void free_growable_buffer(growable_buffer *buffer) {
    free(buffer->content);
    buffer->content = NULL;
    buffer->used = 0;
    buffer->size = 0;
}



bool init_fixed_buffer(fixed_buffer *buffer, char *orig) {
    buffer->content = orig;
    buffer->size = strlen(orig);
    return buffer->content != NULL;
}

void free_fixed_buffer(fixed_buffer *buffer) {
    free(buffer->content);
    buffer->content = NULL;
    buffer->size = 0;
}