diff options
author | Søren Sandmann <sandmann@redhat.com> | 2009-04-02 14:00:18 -0400 |
---|---|---|
committer | Søren Sandmann <sandmann@redhat.com> | 2009-04-02 14:00:18 -0400 |
commit | 98a8963ee6c5c38a19cfd23dcd596b8b5e09a348 (patch) | |
tree | d4a50d70a43ac22d1cdf5020f47c9d2f12e344b4 /array.c | |
parent | 72813fba0400d4b8abf370fded95b0d7164e08b8 (diff) |
Add epoll.[ch]
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 28 |
1 files changed, 19 insertions, 9 deletions
@@ -86,7 +86,7 @@ realloc_array (array_t *array, int n_elements) pot = 1; while (pot < n_bytes) pot *= 2; - + array = g_realloc (array, pot); array->n_bytes = pot; @@ -112,13 +112,20 @@ array_new (int element_size, const int *magic) } static array_t * -array_delete_head (array_t *array, int n_elements) +array_delete_head (array_t *array, gssize n_elements) { int n_bytes = n_elements * array->element_size; + int n_total = array->n_elements * array->element_size; + + if (n_elements < 0 || n_elements > array->n_elements) + n_bytes = n_total; /* FIXME: this should be done in constant time */ - memmove (array->data, (char *)array->data + n_bytes, n_bytes); + memmove (array->data, (char *)array->data + n_bytes, n_total - n_bytes); + + array->n_elements -= n_elements; + nul_terminate (array); return array; @@ -128,7 +135,6 @@ static array_t * array_delete_tail (array_t *array, int n_elements) { array->n_elements -= n_elements; - nul_terminate (array); return array; @@ -245,10 +251,12 @@ nul_string_append_undefined (nul_string_t *str, char **tail) { array_t *array = get_array (str, &string_t_magic); - + array = realloc_array (array, array->n_elements + n_bytes); - str = (nul_string_t *)array->data; + array->n_elements += n_bytes; + str = (nul_string_t *)array->data; + str[array->n_elements] = '\0'; if (tail) @@ -265,7 +273,7 @@ nul_string_append (nul_string_t *str, char *tail; str = nul_string_append_undefined (str, n_bytes, &tail); - + memcpy (tail, bytes, n_bytes); return str; @@ -354,7 +362,7 @@ nul_buffer_get_length (nul_buffer_t *buffer) nul_string_t * nul_buffer_free (nul_buffer_t *buffer, - gboolean free_data) + gboolean free_data) { char *result; @@ -367,6 +375,8 @@ nul_buffer_free (nul_buffer_t *buffer, { result = buffer->data; } + + g_free (buffer); return result; } @@ -484,7 +494,7 @@ nul_buffer_swap_content (nul_buffer_t *buffer1, { nul_string_t *tmp; - tmp = buffer1->data; + tmp = buffer2->data; buffer2->data = buffer1->data; buffer1->data = tmp; } |