From 47911f9544ecd3b028cc044b400536234b17949a Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 7 Jan 2013 10:36:27 +0100 Subject: [PATCH] tag: convert to C++ --- Makefile.am | 24 ++--- src/DatabaseSave.cxx | 4 +- src/{tag.c => Tag.cxx} | 115 +++++++++++------------- src/{tag_internal.h => TagInternal.hxx} | 8 +- src/TagNames.c | 44 +++++++++ src/{tag_pool.c => TagPool.cxx} | 15 ++-- src/{tag_pool.h => TagPool.hxx} | 6 +- src/TagPrint.cxx | 2 +- src/TagSave.cxx | 2 +- src/tag.h | 2 +- 10 files changed, 125 insertions(+), 97 deletions(-) rename src/{tag.c => Tag.cxx} (81%) rename src/{tag_internal.h => TagInternal.hxx} (86%) create mode 100644 src/TagNames.c rename src/{tag_pool.c => TagPool.cxx} (91%) rename src/{tag_pool.h => TagPool.hxx} (90%) diff --git a/Makefile.am b/Makefile.am index 4d1e5620d..1d478c887 100644 --- a/Makefile.am +++ b/Makefile.am @@ -140,7 +140,6 @@ mpd_headers = \ src/stats.h \ src/tag.h \ src/tag_internal.h \ - src/tag_pool.h \ src/tag_table.h \ src/tag_ape.h \ src/tag_id3.h \ @@ -291,8 +290,9 @@ src_mpd_SOURCES = \ src/socket_util.c \ src/StateFile.cxx src/StateFile.hxx \ src/Stats.cxx \ - src/tag.c \ - src/tag_pool.c \ + src/Tag.cxx \ + src/TagNames.c \ + src/TagPool.cxx src/TagPool.hxx \ src/TagPrint.cxx src/TagPrint.hxx \ src/TagSave.cxx src/TagSave.hxx \ src/tag_handler.c src/tag_handler.h \ @@ -1049,7 +1049,7 @@ test_DumpDatabase_SOURCES = test/DumpDatabase.cxx \ src/PlaylistVector.cxx src/PlaylistDatabase.cxx \ src/DatabaseLock.cxx src/DatabaseSave.cxx \ src/Song.cxx src/song_sort.c src/SongSave.cxx \ - src/tag.c src/tag_pool.c src/TagSave.cxx \ + src/Tag.cxx src/TagNames.c src/TagPool.cxx src/TagSave.cxx \ src/path.c \ src/SongFilter.cxx \ src/TextFile.cxx \ @@ -1063,7 +1063,7 @@ test_run_input_SOURCES = test/run_input.c \ test/stdbin.h \ src/io_thread.c src/io_thread.h \ src/conf.c src/tokenizer.c src/utils.c src/string_util.c\ - src/tag.c src/tag_pool.c src/TagSave.cxx \ + src/Tag.cxx src/TagNames.c src/TagPool.cxx src/TagSave.cxx \ src/fd_util.c test_dump_text_file_LDADD = \ @@ -1074,7 +1074,7 @@ test_dump_text_file_SOURCES = test/dump_text_file.c \ test/stdbin.h \ src/io_thread.c src/io_thread.h \ src/conf.c src/tokenizer.c src/utils.c src/string_util.c\ - src/tag.c src/tag_pool.c \ + src/Tag.cxx src/TagNames.c src/TagPool.cxx \ src/text_input_stream.c src/fifo_buffer.c \ src/fd_util.c @@ -1092,7 +1092,7 @@ test_dump_playlist_SOURCES = test/dump_playlist.cxx \ src/io_thread.c src/io_thread.h \ src/conf.c src/tokenizer.c src/utils.c src/string_util.c\ src/uri.c \ - src/Song.cxx src/tag.c src/tag_pool.c src/TagSave.cxx \ + src/Song.cxx src/Tag.cxx src/TagNames.c src/TagPool.cxx src/TagSave.cxx \ src/tag_handler.c src/tag_file.c \ src/audio_check.c src/pcm_buffer.c \ src/text_input_stream.c src/fifo_buffer.c \ @@ -1117,7 +1117,7 @@ test_run_decoder_SOURCES = test/run_decoder.c \ test/stdbin.h \ src/io_thread.c src/io_thread.h \ src/conf.c src/tokenizer.c src/utils.c src/string_util.c src/log.c \ - src/tag.c src/tag_pool.c src/tag_handler.c \ + src/Tag.cxx src/TagNames.c src/TagPool.cxx src/tag_handler.c \ src/ReplayGainInfo.cxx \ src/uri.c \ src/fd_util.c \ @@ -1139,7 +1139,7 @@ test_read_tags_LDADD = \ test_read_tags_SOURCES = test/read_tags.c \ src/io_thread.c src/io_thread.h \ src/conf.c src/tokenizer.c src/utils.c src/string_util.c src/log.c \ - src/tag.c src/tag_pool.c src/tag_handler.c \ + src/Tag.cxx src/TagNames.c src/TagPool.cxx src/tag_handler.c \ src/ReplayGainInfo.cxx \ src/uri.c \ src/fd_util.c \ @@ -1192,7 +1192,7 @@ test_run_encoder_SOURCES = test/run_encoder.c \ src/fifo_buffer.c src/growing_fifo.c \ src/conf.c src/tokenizer.c \ src/utils.c src/string_util.c \ - src/tag.c src/tag_pool.c \ + src/Tag.cxx src/TagNames.c src/TagPool.cxx \ src/audio_check.c \ src/audio_format.c \ src/audio_parser.c @@ -1210,7 +1210,7 @@ test_test_vorbis_encoder_SOURCES = test/test_vorbis_encoder.c \ src/conf.c src/tokenizer.c \ src/utils.c \ src/string_util.c \ - src/tag.c src/tag_pool.c \ + src/Tag.cxx src/TagNames.c src/TagPool.cxx \ src/audio_check.c \ src/audio_format.c \ src/audio_parser.c \ @@ -1266,7 +1266,7 @@ test_run_output_SOURCES = test/run_output.cxx \ src/audio_format.c \ src/audio_parser.c \ src/timer.c src/clock.c \ - src/tag.c src/tag_pool.c \ + src/Tag.cxx src/TagNames.c src/TagPool.cxx \ src/fifo_buffer.c src/growing_fifo.c \ src/page.c \ src/socket_util.c \ diff --git a/src/DatabaseSave.cxx b/src/DatabaseSave.cxx index 78a2c4939..5100c2a0b 100644 --- a/src/DatabaseSave.cxx +++ b/src/DatabaseSave.cxx @@ -24,11 +24,11 @@ #include "DirectorySave.hxx" #include "song.h" #include "TextFile.hxx" +#include "TagInternal.hxx" +#include "tag.h" extern "C" { #include "path.h" -#include "tag.h" -#include "tag_internal.h" } #include diff --git a/src/tag.c b/src/Tag.cxx similarity index 81% rename from src/tag.c rename to src/Tag.cxx index b59c23b23..bdaf76f57 100644 --- a/src/tag.c +++ b/src/Tag.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2011 The Music Player Daemon Project + * Copyright (C) 2003-2013 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -19,8 +19,8 @@ #include "config.h" #include "tag.h" -#include "tag_internal.h" -#include "tag_pool.h" +#include "TagInternal.hxx" +#include "TagPool.hxx" #include "conf.h" #include "song.h" #include "mpd_error.h" @@ -43,38 +43,15 @@ static struct { struct tag_item *items[BULK_MAX]; } bulk; -const char *tag_item_names[TAG_NUM_OF_ITEM_TYPES] = { - [TAG_ARTIST] = "Artist", - [TAG_ARTIST_SORT] = "ArtistSort", - [TAG_ALBUM] = "Album", - [TAG_ALBUM_ARTIST] = "AlbumArtist", - [TAG_ALBUM_ARTIST_SORT] = "AlbumArtistSort", - [TAG_TITLE] = "Title", - [TAG_TRACK] = "Track", - [TAG_NAME] = "Name", - [TAG_GENRE] = "Genre", - [TAG_DATE] = "Date", - [TAG_COMPOSER] = "Composer", - [TAG_PERFORMER] = "Performer", - [TAG_COMMENT] = "Comment", - [TAG_DISC] = "Disc", - - /* MusicBrainz tags from http://musicbrainz.org/doc/MusicBrainzTag */ - [TAG_MUSICBRAINZ_ARTISTID] = "MUSICBRAINZ_ARTISTID", - [TAG_MUSICBRAINZ_ALBUMID] = "MUSICBRAINZ_ALBUMID", - [TAG_MUSICBRAINZ_ALBUMARTISTID] = "MUSICBRAINZ_ALBUMARTISTID", - [TAG_MUSICBRAINZ_TRACKID] = "MUSICBRAINZ_TRACKID", -}; - bool ignore_tag_items[TAG_NUM_OF_ITEM_TYPES]; enum tag_type tag_name_parse(const char *name) { - assert(name != NULL); + assert(name != nullptr); for (unsigned i = 0; i < TAG_NUM_OF_ITEM_TYPES; ++i) { - assert(tag_item_names[i] != NULL); + assert(tag_item_names[i] != nullptr); if (strcmp(name, tag_item_names[i]) == 0) return (enum tag_type)i; @@ -86,10 +63,10 @@ tag_name_parse(const char *name) enum tag_type tag_name_parse_i(const char *name) { - assert(name != NULL); + assert(name != nullptr); for (unsigned i = 0; i < TAG_NUM_OF_ITEM_TYPES; ++i) { - assert(tag_item_names[i] != NULL); + assert(tag_item_names[i] != nullptr); if (g_ascii_strcasecmp(name, tag_item_names[i]) == 0) return (enum tag_type)i; @@ -117,8 +94,8 @@ void tag_lib_init(void) /* ignore comments by default */ ignore_tag_items[TAG_COMMENT] = true; - value = config_get_string(CONF_METADATA_TO_USE, NULL); - if (value == NULL) + value = config_get_string(CONF_METADATA_TO_USE, nullptr); + if (value == nullptr) return; memset(ignore_tag_items, true, TAG_NUM_OF_ITEM_TYPES); @@ -156,7 +133,7 @@ void tag_lib_init(void) struct tag *tag_new(void) { struct tag *ret = g_new(struct tag, 1); - ret->items = NULL; + ret->items = nullptr; ret->time = -1; ret->has_playlist = false; ret->num_items = 0; @@ -178,10 +155,11 @@ static void tag_delete_item(struct tag *tag, unsigned idx) } if (tag->num_items > 0) { - tag->items = g_realloc(tag->items, items_size(tag)); + tag->items = (struct tag_item **) + g_realloc(tag->items, items_size(tag)); } else { g_free(tag->items); - tag->items = NULL; + tag->items = nullptr; } } @@ -200,7 +178,7 @@ void tag_free(struct tag *tag) { int i; - assert(tag != NULL); + assert(tag != nullptr); g_static_mutex_lock(&tag_pool_lock); for (i = tag->num_items; --i >= 0; ) @@ -223,13 +201,15 @@ struct tag *tag_dup(const struct tag *tag) struct tag *ret; if (!tag) - return NULL; + return nullptr; ret = tag_new(); ret->time = tag->time; ret->has_playlist = tag->has_playlist; ret->num_items = tag->num_items; - ret->items = ret->num_items > 0 ? g_malloc(items_size(tag)) : NULL; + ret->items = ret->num_items > 0 + ? (struct tag_item **)g_malloc(items_size(tag)) + : nullptr; g_static_mutex_lock(&tag_pool_lock); for (unsigned i = 0; i < tag->num_items; i++) @@ -245,15 +225,17 @@ tag_merge(const struct tag *base, const struct tag *add) struct tag *ret; unsigned n; - assert(base != NULL); - assert(add != NULL); + assert(base != nullptr); + assert(add != nullptr); /* allocate new tag object */ ret = tag_new(); ret->time = add->time > 0 ? add->time : base->time; ret->num_items = base->num_items + add->num_items; - ret->items = ret->num_items > 0 ? g_malloc(items_size(ret)) : NULL; + ret->items = ret->num_items > 0 + ? (struct tag_item **)g_malloc(items_size(ret)) + : nullptr; g_static_mutex_lock(&tag_pool_lock); @@ -279,7 +261,8 @@ tag_merge(const struct tag *base, const struct tag *add) assert(n > 0); ret->num_items = n; - ret->items = g_realloc(ret->items, items_size(ret)); + ret->items = (struct tag_item **) + g_realloc(ret->items, items_size(ret)); } return ret; @@ -288,10 +271,10 @@ tag_merge(const struct tag *base, const struct tag *add) struct tag * tag_merge_replace(struct tag *base, struct tag *add) { - if (add == NULL) + if (add == nullptr) return base; - if (base == NULL) + if (base == nullptr) return add; struct tag *tag = tag_merge(base, add); @@ -304,24 +287,24 @@ tag_merge_replace(struct tag *base, struct tag *add) const char * tag_get_value(const struct tag *tag, enum tag_type type) { - assert(tag != NULL); + assert(tag != nullptr); assert(type < TAG_NUM_OF_ITEM_TYPES); for (unsigned i = 0; i < tag->num_items; i++) if (tag->items[i]->type == type) return tag->items[i]->value; - return NULL; + return nullptr; } bool tag_has_type(const struct tag *tag, enum tag_type type) { - return tag_get_value(tag, type) != NULL; + return tag_get_value(tag, type) != nullptr; } bool tag_equal(const struct tag *tag1, const struct tag *tag2) { - if (tag1 == NULL && tag2 == NULL) + if (tag1 == nullptr && tag2 == nullptr) return true; else if (!tag1 || !tag2) return false; @@ -367,16 +350,16 @@ fix_utf8(const char *str, size_t length) char *temp; gsize written; - assert(str != NULL); + assert(str != nullptr); /* check if the string is already valid UTF-8 */ if (g_utf8_validate(str, length, &end)) - return NULL; + return nullptr; /* no, it's not - try to import it from ISO-Latin-1 */ temp = g_convert(str, length, "utf-8", "iso-8859-1", - NULL, &written, NULL); - if (temp != NULL) + nullptr, &written, nullptr); + if (temp != nullptr) /* success! */ return temp; @@ -388,8 +371,8 @@ fix_utf8(const char *str, size_t length) void tag_begin_add(struct tag *tag) { assert(!bulk.busy); - assert(tag != NULL); - assert(tag->items == NULL); + assert(tag != nullptr); + assert(tag->items == nullptr); assert(tag->num_items == 0); #ifndef NDEBUG @@ -406,10 +389,11 @@ void tag_end_add(struct tag *tag) if (tag->num_items > 0) { /* copy the tag items from the bulk list over to a new list (which fits exactly) */ - tag->items = g_malloc(items_size(tag)); + tag->items = (struct tag_item **) + g_malloc(items_size(tag)); memcpy(tag->items, bulk.items, items_size(tag)); } else - tag->items = NULL; + tag->items = nullptr; } #ifndef NDEBUG @@ -430,12 +414,12 @@ find_non_printable(const char *p, size_t length) if (char_is_non_printable(p[i])) return p + i; - return NULL; + return nullptr; } /** * Clears all non-printable characters, convert them to space. - * Returns NULL if nothing needs to be cleared. + * Returns nullptr if nothing needs to be cleared. */ static char * clear_non_printable(const char *p, size_t length) @@ -443,8 +427,8 @@ clear_non_printable(const char *p, size_t length) const char *first = find_non_printable(p, length); char *dest; - if (first == NULL) - return NULL; + if (first == nullptr) + return nullptr; dest = g_strndup(p, length); @@ -461,13 +445,13 @@ fix_tag_value(const char *p, size_t length) char *utf8, *cleared; utf8 = fix_utf8(p, length); - if (utf8 != NULL) { + if (utf8 != nullptr) { p = utf8; length = strlen(p); } cleared = clear_non_printable(p, length); - if (cleared == NULL) + if (cleared == nullptr) cleared = utf8; else g_free(utf8); @@ -483,7 +467,7 @@ tag_add_item_internal(struct tag *tag, enum tag_type type, char *p; p = fix_tag_value(value, len); - if (p != NULL) { + if (p != nullptr) { value = p; len = strlen(value); } @@ -492,12 +476,13 @@ tag_add_item_internal(struct tag *tag, enum tag_type type, if (tag->items != bulk.items) /* bulk mode disabled */ - tag->items = g_realloc(tag->items, items_size(tag)); + tag->items = (struct tag_item **) + g_realloc(tag->items, items_size(tag)); else if (tag->num_items >= BULK_MAX) { /* bulk list already full - switch back to non-bulk */ assert(bulk.busy); - tag->items = g_malloc(items_size(tag)); + tag->items = (struct tag_item **)g_malloc(items_size(tag)); memcpy(tag->items, bulk.items, items_size(tag) - sizeof(struct tag_item *)); } diff --git a/src/tag_internal.h b/src/TagInternal.hxx similarity index 86% rename from src/tag_internal.h rename to src/TagInternal.hxx index af05cc6b6..afce0427e 100644 --- a/src/tag_internal.h +++ b/src/TagInternal.hxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2011 The Music Player Daemon Project + * Copyright (C) 2003-2013 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -17,13 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef MPD_TAG_INTERNAL_H -#define MPD_TAG_INTERNAL_H +#ifndef MPD_TAG_INTERNAL_HXX +#define MPD_TAG_INTERNAL_HXX #include "tag.h" -#include - extern bool ignore_tag_items[TAG_NUM_OF_ITEM_TYPES]; #endif diff --git a/src/TagNames.c b/src/TagNames.c new file mode 100644 index 000000000..eca320afb --- /dev/null +++ b/src/TagNames.c @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2003-2013 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "config.h" +#include "tag.h" + +const char *tag_item_names[TAG_NUM_OF_ITEM_TYPES] = { + [TAG_ARTIST] = "Artist", + [TAG_ARTIST_SORT] = "ArtistSort", + [TAG_ALBUM] = "Album", + [TAG_ALBUM_ARTIST] = "AlbumArtist", + [TAG_ALBUM_ARTIST_SORT] = "AlbumArtistSort", + [TAG_TITLE] = "Title", + [TAG_TRACK] = "Track", + [TAG_NAME] = "Name", + [TAG_GENRE] = "Genre", + [TAG_DATE] = "Date", + [TAG_COMPOSER] = "Composer", + [TAG_PERFORMER] = "Performer", + [TAG_COMMENT] = "Comment", + [TAG_DISC] = "Disc", + + /* MusicBrainz tags from http://musicbrainz.org/doc/MusicBrainzTag */ + [TAG_MUSICBRAINZ_ARTISTID] = "MUSICBRAINZ_ARTISTID", + [TAG_MUSICBRAINZ_ALBUMID] = "MUSICBRAINZ_ALBUMID", + [TAG_MUSICBRAINZ_ALBUMARTISTID] = "MUSICBRAINZ_ALBUMARTISTID", + [TAG_MUSICBRAINZ_TRACKID] = "MUSICBRAINZ_TRACKID", +}; diff --git a/src/tag_pool.c b/src/TagPool.cxx similarity index 91% rename from src/tag_pool.c rename to src/TagPool.cxx index 2f9b39486..ce715a158 100644 --- a/src/tag_pool.c +++ b/src/TagPool.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2011 The Music Player Daemon Project + * Copyright (C) 2003-2013 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -18,7 +18,7 @@ */ #include "config.h" -#include "tag_pool.h" +#include "TagPool.hxx" #include @@ -49,7 +49,7 @@ calc_hash_n(enum tag_type type, const char *p, size_t length) { unsigned hash = 5381; - assert(p != NULL); + assert(p != nullptr); while (length-- > 0) hash = (hash << 5) + hash + *p++; @@ -62,7 +62,7 @@ calc_hash(enum tag_type type, const char *p) { unsigned hash = 5381; - assert(p != NULL); + assert(p != nullptr); while (*p != 0) hash = (hash << 5) + hash + *p++; @@ -82,7 +82,8 @@ static struct slot *slot_alloc(struct slot *next, { struct slot *slot; - slot = g_malloc(sizeof(*slot) - sizeof(slot->item.value) + length + 1); + slot = (struct slot *) + g_malloc(sizeof(*slot) - sizeof(slot->item.value) + length + 1); slot->next = next; slot->ref = 1; slot->item.type = type; @@ -97,7 +98,7 @@ tag_pool_get_item(enum tag_type type, const char *value, size_t length) struct slot **slot_p, *slot; slot_p = &slots[calc_hash_n(type, value, length) % NUM_SLOTS]; - for (slot = *slot_p; slot != NULL; slot = slot->next) { + for (slot = *slot_p; slot != nullptr; slot = slot->next) { if (slot->item.type == type && length == strlen(slot->item.value) && memcmp(value, slot->item.value, length) == 0 && @@ -150,7 +151,7 @@ void tag_pool_put_item(struct tag_item *item) for (slot_p = &slots[calc_hash(item->type, item->value) % NUM_SLOTS]; *slot_p != slot; slot_p = &(*slot_p)->next) { - assert(*slot_p != NULL); + assert(*slot_p != nullptr); } *slot_p = slot->next; diff --git a/src/tag_pool.h b/src/TagPool.hxx similarity index 90% rename from src/tag_pool.h rename to src/TagPool.hxx index a717f704d..170b2dae4 100644 --- a/src/tag_pool.h +++ b/src/TagPool.hxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2011 The Music Player Daemon Project + * Copyright (C) 2003-2013 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -17,8 +17,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef MPD_TAG_POOL_H -#define MPD_TAG_POOL_H +#ifndef MPD_TAG_POOL_HXX +#define MPD_TAG_POOL_HXX #include "tag.h" diff --git a/src/TagPrint.cxx b/src/TagPrint.cxx index 5a5dbbeff..b3ad07df4 100644 --- a/src/TagPrint.cxx +++ b/src/TagPrint.cxx @@ -20,7 +20,7 @@ #include "config.h" #include "TagPrint.hxx" #include "tag.h" -#include "tag_internal.h" +#include "TagInternal.hxx" #include "song.h" #include "Client.hxx" diff --git a/src/TagSave.cxx b/src/TagSave.cxx index 639dc2d97..15da9fc4b 100644 --- a/src/TagSave.cxx +++ b/src/TagSave.cxx @@ -20,7 +20,7 @@ #include "config.h" #include "TagSave.hxx" #include "tag.h" -#include "tag_internal.h" +#include "TagInternal.hxx" #include "song.h" void tag_save(FILE *file, const struct tag *tag) diff --git a/src/tag.h b/src/tag.h index a94fb0d5a..3b47148a4 100644 --- a/src/tag.h +++ b/src/tag.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2011 The Music Player Daemon Project + * Copyright (C) 2003-2013 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify