6 UcxBuffer *ucx_buffer_new(void *space, size_t size, int flags) { |
6 UcxBuffer *ucx_buffer_new(void *space, size_t size, int flags) { |
7 UcxBuffer *buffer = (UcxBuffer*) malloc(sizeof(UcxBuffer)); |
7 UcxBuffer *buffer = (UcxBuffer*) malloc(sizeof(UcxBuffer)); |
8 if (buffer) { |
8 if (buffer) { |
9 buffer->flags = flags; |
9 buffer->flags = flags; |
10 if (!space) { |
10 if (!space) { |
11 buffer->space = malloc(size); |
11 buffer->space = (char*)malloc(size); |
12 if (!buffer->space) { |
12 if (!buffer->space) { |
13 free(buffer); |
13 free(buffer); |
14 return NULL; |
14 return NULL; |
15 } |
15 } |
16 memset(buffer->space, 0, size); |
16 memset(buffer->space, 0, size); |
17 buffer->flags |= UCX_BUFFER_AUTOFREE; |
17 buffer->flags |= UCX_BUFFER_AUTOFREE; |
18 } else { |
18 } else { |
19 buffer->space = space; |
19 buffer->space = (char*)space; |
20 } |
20 } |
21 buffer->capacity = size; |
21 buffer->capacity = size; |
22 buffer->size = 0; |
22 buffer->size = 0; |
23 |
23 |
24 buffer->pos = 0; |
24 buffer->pos = 0; |
93 |
93 |
94 int ucx_buffer_extend(UcxBuffer *buffer, size_t len) { |
94 int ucx_buffer_extend(UcxBuffer *buffer, size_t len) { |
95 size_t newcap = buffer->capacity; |
95 size_t newcap = buffer->capacity; |
96 while (buffer->pos + len > newcap) newcap <<= 1; |
96 while (buffer->pos + len > newcap) newcap <<= 1; |
97 |
97 |
98 char *newspace = realloc(buffer->space, newcap); |
98 char *newspace = (char*)realloc(buffer->space, newcap); |
99 if (newspace) { |
99 if (newspace) { |
100 memset(newspace+buffer->size, 0, newcap-buffer->size); |
100 memset(newspace+buffer->size, 0, newcap-buffer->size); |
101 buffer->space = newspace; |
101 buffer->space = newspace; |
102 buffer->capacity = newcap; |
102 buffer->capacity = newcap; |
103 } else { |
103 } else { |