diff options
author | Eric Wong <normalperson@yhbt.net> | 2008-09-07 19:14:43 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-09-07 19:14:43 +0200 |
commit | 194c8c3c0fc92e5d781a6cc23252a701c84bb380 (patch) | |
tree | 299329455ca90997b8128bb4816f8d34eb455ca5 | |
parent | 4dd9d4b2fdfb6adde66920d4fd1bb65a1cf0695a (diff) | |
download | mpd-194c8c3c0fc92e5d781a6cc23252a701c84bb380.tar.gz mpd-194c8c3c0fc92e5d781a6cc23252a701c84bb380.tar.xz mpd-194c8c3c0fc92e5d781a6cc23252a701c84bb380.zip |
tag: introduce handy items_size() function
Trying to read or remember
"tag->numOfItems * sizeof(*tag->items)"
requires too much thinking and mental effort on my part.
Also, favor "sizeof(struct mpd_tag)" over "sizeof(*tag->items)"
because the former is easier to read and follow, even though
the latter is easier to modify if the items member changes
to a different type.
-rw-r--r-- | src/tag.c | 23 |
1 files changed, 12 insertions, 11 deletions
@@ -55,6 +55,11 @@ const char *mpdTagItemKeys[TAG_NUM_OF_ITEM_TYPES] = { mpd_sint8 ignoreTagItems[TAG_NUM_OF_ITEM_TYPES]; +static size_t items_size(const struct tag *tag) +{ + return (tag->numOfItems * sizeof(struct tag_item)); +} + void tag_lib_init(void) { int quit = 0; @@ -248,8 +253,7 @@ static void deleteItem(struct tag *tag, int idx) } if (tag->numOfItems > 0) { - tag->items = xrealloc(tag->items, - tag->numOfItems * sizeof(*tag->items)); + tag->items = xrealloc(tag->items, items_size(tag)); } else { free(tag->items); tag->items = NULL; @@ -311,7 +315,7 @@ struct tag *tag_dup(const struct tag *tag) ret = tag_new(); ret->time = tag->time; ret->numOfItems = tag->numOfItems; - ret->items = xmalloc(ret->numOfItems * sizeof(ret->items[0])); + ret->items = ret->numOfItems > 0 ? xmalloc(items_size(tag)) : NULL; for (i = 0; i < tag->numOfItems; i++) { ret->items[i] = tag_pool_dup_item(tag->items[i]); @@ -381,10 +385,8 @@ void tag_end_add(struct tag *tag) if (tag->numOfItems > 0) { /* copy the tag items from the bulk list over to a new list (which fits exactly) */ - tag->items = xmalloc(tag->numOfItems * - sizeof(tag->items[0])); - memcpy(tag->items, bulk.items, - tag->numOfItems * sizeof(tag->items[0])); + tag->items = xmalloc(items_size(tag)); + memcpy(tag->items, bulk.items, items_size(tag)); } else tag->items = NULL; } @@ -416,15 +418,14 @@ static void appendToTagItems(struct tag *tag, enum tag_type type, if (tag->items != bulk.items) /* bulk mode disabled */ - tag->items = xrealloc(tag->items, - tag->numOfItems * sizeof(*tag->items)); + tag->items = xrealloc(tag->items, items_size(tag)); else if (tag->numOfItems >= BULK_MAX) { /* bulk list already full - switch back to non-bulk */ assert(bulk.busy); - tag->items = xmalloc(tag->numOfItems * sizeof(tag->items[0])); + tag->items = xmalloc(items_size(tag)); memcpy(tag->items, bulk.items, - (tag->numOfItems - 1) * sizeof(tag->items[0])); + items_size(tag) - sizeof(struct tag_item)); } tag->items[i] = tag_pool_get_item(type, p, len); |