diff options
Diffstat (limited to 'ot_vector.c')
-rw-r--r-- | ot_vector.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/ot_vector.c b/ot_vector.c index 2bc07b5..2acfbef 100644 --- a/ot_vector.c +++ b/ot_vector.c | |||
@@ -67,12 +67,15 @@ void *vector_find_or_insert(ot_vector *vector, void *key, size_t member_size, si | |||
67 | return match; | 67 | return match; |
68 | 68 | ||
69 | if (vector->size + 1 > vector->space) { | 69 | if (vector->size + 1 > vector->space) { |
70 | size_t new_space = vector->space ? OT_VECTOR_GROW_RATIO * vector->space : OT_VECTOR_MIN_MEMBERS; | 70 | size_t new_space = vector->space ? OT_VECTOR_GROW_RATIO * vector->space : OT_VECTOR_MIN_MEMBERS; |
71 | uint8_t *new_data = realloc(vector->data, new_space * member_size); | 71 | ptrdiff_t match_off = match - (uint8_t *)vector->data; |
72 | uint8_t *new_data = realloc(vector->data, new_space * member_size); | ||
73 | |||
72 | if (!new_data) | 74 | if (!new_data) |
73 | return NULL; | 75 | return NULL; |
76 | |||
74 | /* Adjust pointer if it moved by realloc */ | 77 | /* Adjust pointer if it moved by realloc */ |
75 | match = new_data + (match - (uint8_t *)vector->data); | 78 | match = new_data + match_off; |
76 | 79 | ||
77 | vector->data = new_data; | 80 | vector->data = new_data; |
78 | vector->space = new_space; | 81 | vector->space = new_space; |