summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-01-07 10:36:27 +0100
committerMax Kellermann <max@duempel.org>2013-01-07 10:36:27 +0100
commit47911f9544ecd3b028cc044b400536234b17949a (patch)
tree337b28a3679611dd70252f52dd6ad98faf35fdf0 /src
parent48025c2279c246236aca858f37759726a5d3042c (diff)
tag: convert to C++
Diffstat (limited to 'src')
-rw-r--r--src/DatabaseSave.cxx4
-rw-r--r--src/Tag.cxx (renamed from src/tag.c)115
-rw-r--r--src/TagInternal.hxx (renamed from src/tag_internal.h)8
-rw-r--r--src/TagNames.c44
-rw-r--r--src/TagPool.cxx (renamed from src/tag_pool.c)15
-rw-r--r--src/TagPool.hxx (renamed from src/tag_pool.h)6
-rw-r--r--src/TagPrint.cxx2
-rw-r--r--src/TagSave.cxx2
-rw-r--r--src/tag.h2
9 files changed, 113 insertions, 85 deletions
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 <glib.h>
diff --git a/src/tag.c b/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
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 <stdbool.h>
-
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
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 <assert.h>
@@ -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
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