diff options
Diffstat (limited to 'ext/metadata/metadatatypes.c')
-rw-r--r-- | ext/metadata/metadatatypes.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/ext/metadata/metadatatypes.c b/ext/metadata/metadatatypes.c index a3aee807..8a5b4968 100644 --- a/ext/metadata/metadatatypes.c +++ b/ext/metadata/metadatatypes.c @@ -80,7 +80,8 @@ metadata_chunk_array_append (MetadataChunkArray * array, MetadataChunk * chunk) { if (array->len == array->allocated_len) { array->allocated_len += 2; - array->chunk = g_realloc (array->chunk, array->allocated_len); + array->chunk = + g_realloc (array->chunk, sizeof (MetadataChunk) * array->allocated_len); } memcpy (&array->chunk[array->len], chunk, sizeof (MetadataChunk)); ++array->len; @@ -94,7 +95,8 @@ metadata_chunk_array_append_sorted (MetadataChunkArray * array, if (array->len == array->allocated_len) { array->allocated_len += 2; - array->chunk = g_realloc (array->chunk, array->allocated_len); + array->chunk = + g_realloc (array->chunk, sizeof (MetadataChunk) * array->allocated_len); } pos = array->len; for (i = array->len - 1; i >= 0; --i) { @@ -113,3 +115,21 @@ metadata_chunk_array_append_sorted (MetadataChunkArray * array, return; } + +void +metadata_chunk_array_remove_zero_size (MetadataChunkArray * array) +{ + + int i; + + for (i = 0; i < array->len;) { + if (array->chunk[i].size == 0) { + if (i < --array->len) { + memmove (&array->chunk[i], &array->chunk[i + 1], + sizeof (MetadataChunk) * (array->len - i)); + } + } else { + ++i; + } + } +} |