| 82 | /* Grow VEC by SIZE bytes. */ |
| 83 | |
| 84 | void * |
| 85 | backtrace_vector_grow (struct backtrace_state *state ATTRIBUTE_UNUSED, |
| 86 | size_t size, backtrace_error_callback error_callback, |
| 87 | void *data, struct backtrace_vector *vec) |
| 88 | { |
| 89 | void *ret; |
| 90 | |
| 91 | if (size > vec->alc) |
| 92 | { |
| 93 | size_t alc; |
| 94 | void *base; |
| 95 | |
| 96 | if (vec->size == 0) |
| 97 | alc = 32 * size; |
| 98 | else if (vec->size >= 4096) |
| 99 | alc = vec->size + 4096; |
| 100 | else |
| 101 | alc = 2 * vec->size; |
| 102 | |
| 103 | if (alc < vec->size + size) |
| 104 | alc = vec->size + size; |
| 105 | |
| 106 | base = rprealloc (vec->base, alc); |
| 107 | if (base == NULL) |
| 108 | { |
| 109 | error_callback (data, "realloc", errno); |
| 110 | return NULL; |
| 111 | } |
| 112 | |
| 113 | vec->base = base; |
| 114 | vec->alc = alc - vec->size; |
| 115 | } |
| 116 | |
| 117 | ret = (char *) vec->base + vec->size; |
| 118 | vec->size += size; |
| 119 | vec->alc -= size; |
| 120 | return ret; |
| 121 | } |
| 122 | |
| 123 | /* Finish the current allocation on VEC. */ |
| 124 |
no test coverage detected