From 1bdb67fafab13763c5d49f78ee43bd602cab3714 Mon Sep 17 00:00:00 2001 From: Scott Wheeler Date: Sun, 21 Oct 2007 17:35:40 +0000 Subject: [PATCH] More TAGLIB_EXPORTs from Lukas. git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@727755 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- bindings/c/tag_c.h | 58 ++++++++++--------- examples/Makefile.am | 4 +- taglib/flac/flacproperties.h | 3 +- taglib/mpc/mpcproperties.h | 3 +- taglib/mpeg/id3v1/id3v1tag.h | 2 +- taglib/mpeg/id3v2/frames/commentsframe.h | 3 +- .../frames/generalencapsulatedobjectframe.h | 3 +- .../mpeg/id3v2/frames/relativevolumeframe.h | 3 +- .../id3v2/frames/textidentificationframe.h | 2 +- .../id3v2/frames/uniquefileidentifierframe.h | 2 +- taglib/mpeg/id3v2/frames/unknownframe.h | 3 +- taglib/mpeg/id3v2/id3v2extendedheader.h | 3 +- taglib/mpeg/id3v2/id3v2footer.h | 3 +- taglib/mpeg/id3v2/id3v2framefactory.h | 1 - taglib/mpeg/mpegheader.h | 4 +- taglib/mpeg/mpegproperties.h | 3 +- taglib/mpeg/xingheader.h | 3 +- taglib/ogg/oggpage.h | 3 +- taglib/ogg/vorbis/vorbisproperties.h | 3 +- taglib/toolkit/tbytevector.h | 2 +- taglib/toolkit/tbytevectorlist.h | 3 +- taglib/toolkit/tstring.h | 6 +- 22 files changed, 69 insertions(+), 51 deletions(-) diff --git a/bindings/c/tag_c.h b/bindings/c/tag_c.h index 2c6a1708..fff196a2 100644 --- a/bindings/c/tag_c.h +++ b/bindings/c/tag_c.h @@ -29,6 +29,8 @@ extern "C" { #endif +#include "taglib_export.h" + #ifndef BOOL #define BOOL int #endif @@ -57,7 +59,7 @@ typedef struct { int dummy; } TagLib_AudioProperties; * However, it may be desirable for TagLib to operate on Latin1 (ISO-8859-1) * strings in which case this should be set to FALSE. */ -void taglib_set_strings_unicode(BOOL unicode); +TAGLIB_EXPORT void taglib_set_strings_unicode(BOOL unicode); /*! * TagLib can keep track of strings that are created when outputting tag values @@ -65,7 +67,7 @@ void taglib_set_strings_unicode(BOOL unicode); * However if you wish to do more fine grained management of strings, you can do * so by setting \a management to FALSE. */ -void taglib_set_string_management_enabled(BOOL management); +TAGLIB_EXPORT void taglib_set_string_management_enabled(BOOL management); /******************************************************************************* * File API @@ -86,35 +88,35 @@ typedef enum { * \returns NULL if the file type cannot be determined or the file cannot * be opened. */ -TagLib_File *taglib_file_new(const char *filename); +TAGLIB_EXPORT TagLib_File *taglib_file_new(const char *filename); /*! * Creates a TagLib file based on \a filename. Rather than attempting to guess * the type, it will use the one specified by \a type. */ -TagLib_File *taglib_file_new_type(const char *filename, TagLib_File_Type type); +TAGLIB_EXPORT TagLib_File *taglib_file_new_type(const char *filename, TagLib_File_Type type); /*! * Frees and closes the file. */ -void taglib_file_free(TagLib_File *file); +TAGLIB_EXPORT void taglib_file_free(TagLib_File *file); /*! * Returns a pointer to the tag associated with this file. This will be freed * automatically when the file is freed. */ -TagLib_Tag *taglib_file_tag(const TagLib_File *file); +TAGLIB_EXPORT TagLib_Tag *taglib_file_tag(const TagLib_File *file); /*! * Returns a pointer to the the audio properties associated with this file. This * will be freed automatically when the file is freed. */ -const TagLib_AudioProperties *taglib_file_audioproperties(const TagLib_File *file); +TAGLIB_EXPORT const TagLib_AudioProperties *taglib_file_audioproperties(const TagLib_File *file); /*! * Saves the \a file to disk. */ -BOOL taglib_file_save(TagLib_File *file); +TAGLIB_EXPORT BOOL taglib_file_save(TagLib_File *file); /****************************************************************************** * Tag API @@ -126,7 +128,7 @@ BOOL taglib_file_save(TagLib_File *file); * \note By default this string should be UTF8 encoded and its memory should be * freed using taglib_tag_free_strings(). */ -char *taglib_tag_title(const TagLib_Tag *tag); +TAGLIB_EXPORT char *taglib_tag_title(const TagLib_Tag *tag); /*! * Returns a string with this tag's artist. @@ -134,7 +136,7 @@ char *taglib_tag_title(const TagLib_Tag *tag); * \note By default this string should be UTF8 encoded and its memory should be * freed using taglib_tag_free_strings(). */ -char *taglib_tag_artist(const TagLib_Tag *tag); +TAGLIB_EXPORT char *taglib_tag_artist(const TagLib_Tag *tag); /*! * Returns a string with this tag's album name. @@ -142,7 +144,7 @@ char *taglib_tag_artist(const TagLib_Tag *tag); * \note By default this string should be UTF8 encoded and its memory should be * freed using taglib_tag_free_strings(). */ -char *taglib_tag_album(const TagLib_Tag *tag); +TAGLIB_EXPORT char *taglib_tag_album(const TagLib_Tag *tag); /*! * Returns a string with this tag's comment. @@ -150,7 +152,7 @@ char *taglib_tag_album(const TagLib_Tag *tag); * \note By default this string should be UTF8 encoded and its memory should be * freed using taglib_tag_free_strings(). */ -char *taglib_tag_comment(const TagLib_Tag *tag); +TAGLIB_EXPORT char *taglib_tag_comment(const TagLib_Tag *tag); /*! * Returns a string with this tag's genre. @@ -158,67 +160,67 @@ char *taglib_tag_comment(const TagLib_Tag *tag); * \note By default this string should be UTF8 encoded and its memory should be * freed using taglib_tag_free_strings(). */ -char *taglib_tag_genre(const TagLib_Tag *tag); +TAGLIB_EXPORT char *taglib_tag_genre(const TagLib_Tag *tag); /*! * Returns the tag's year or 0 if year is not set. */ -unsigned int taglib_tag_year(const TagLib_Tag *tag); +TAGLIB_EXPORT unsigned int taglib_tag_year(const TagLib_Tag *tag); /*! * Returns the tag's track number or 0 if track number is not set. */ -unsigned int taglib_tag_track(const TagLib_Tag *tag); +TAGLIB_EXPORT unsigned int taglib_tag_track(const TagLib_Tag *tag); /*! * Sets the tag's title. * * \note By default this string should be UTF8 encoded. */ -void taglib_tag_set_title(TagLib_Tag *tag, const char *title); +TAGLIB_EXPORT void taglib_tag_set_title(TagLib_Tag *tag, const char *title); /*! * Sets the tag's artist. * * \note By default this string should be UTF8 encoded. */ -void taglib_tag_set_artist(TagLib_Tag *tag, const char *artist); +TAGLIB_EXPORT void taglib_tag_set_artist(TagLib_Tag *tag, const char *artist); /*! * Sets the tag's album. * * \note By default this string should be UTF8 encoded. */ -void taglib_tag_set_album(TagLib_Tag *tag, const char *album); +TAGLIB_EXPORT void taglib_tag_set_album(TagLib_Tag *tag, const char *album); /*! * Sets the tag's comment. * * \note By default this string should be UTF8 encoded. */ -void taglib_tag_set_comment(TagLib_Tag *tag, const char *comment); +TAGLIB_EXPORT void taglib_tag_set_comment(TagLib_Tag *tag, const char *comment); /*! * Sets the tag's genre. * * \note By default this string should be UTF8 encoded. */ -void taglib_tag_set_genre(TagLib_Tag *tag, const char *genre); +TAGLIB_EXPORT void taglib_tag_set_genre(TagLib_Tag *tag, const char *genre); /*! * Sets the tag's year. 0 indicates that this field should be cleared. */ -void taglib_tag_set_year(TagLib_Tag *tag, unsigned int year); +TAGLIB_EXPORT void taglib_tag_set_year(TagLib_Tag *tag, unsigned int year); /*! * Sets the tag's track number. 0 indicates that this field should be cleared. */ -void taglib_tag_set_track(TagLib_Tag *tag, unsigned int track); +TAGLIB_EXPORT void taglib_tag_set_track(TagLib_Tag *tag, unsigned int track); /*! * Frees all of the strings that have been created by the tag. */ -void taglib_tag_free_strings(void); +TAGLIB_EXPORT void taglib_tag_free_strings(void); /****************************************************************************** * Audio Properties API @@ -227,22 +229,22 @@ void taglib_tag_free_strings(void); /*! * Returns the length of the file in seconds. */ -int taglib_audioproperties_length(const TagLib_AudioProperties *audioProperties); +TAGLIB_EXPORT int taglib_audioproperties_length(const TagLib_AudioProperties *audioProperties); /*! * Returns the bitrate of the file in kb/s. */ -int taglib_audioproperties_bitrate(const TagLib_AudioProperties *audioProperties); +TAGLIB_EXPORT int taglib_audioproperties_bitrate(const TagLib_AudioProperties *audioProperties); /*! * Returns the sample rate of the file in Hz. */ -int taglib_audioproperties_samplerate(const TagLib_AudioProperties *audioProperties); +TAGLIB_EXPORT int taglib_audioproperties_samplerate(const TagLib_AudioProperties *audioProperties); /*! * Returns the number of channels in the audio stream. */ -int taglib_audioproperties_channels(const TagLib_AudioProperties *audioProperties); +TAGLIB_EXPORT int taglib_audioproperties_channels(const TagLib_AudioProperties *audioProperties); /******************************************************************************* * Special convenience ID3v2 functions @@ -259,7 +261,7 @@ typedef enum { * This sets the default encoding for ID3v2 frames that are written to tags. */ -void taglib_id3v2_set_default_text_encoding(TagLib_ID3v2_Encoding encoding); +TAGLIB_EXPORT void taglib_id3v2_set_default_text_encoding(TagLib_ID3v2_Encoding encoding); #ifdef __cplusplus } diff --git a/examples/Makefile.am b/examples/Makefile.am index c00f4870..469de7d9 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -1,9 +1,10 @@ -bin_PROGRAMS = tagreader tagreader_c tagwriter framelist strip-id3v1 +bin_PROGRAMS = tagreader tagreader_c tagwriter framelist strip-id3v1 taglib-image tagreader_SOURCES = tagreader.cpp tagreader_c_SOURCES = tagreader_c.c tagwriter_SOURCES = tagwriter.cpp framelist_SOURCES = framelist.cpp strip_id3v1_SOURCES = strip-id3v1.cpp +taglib_image_SOURCES = taglib-image.cpp INCLUDES = \ -I$(top_srcdir)/taglib \ @@ -11,6 +12,7 @@ INCLUDES = \ -I$(top_srcdir)/taglib/mpeg \ -I$(top_srcdir)/taglib/mpeg/id3v1 \ -I$(top_srcdir)/taglib/mpeg/id3v2 \ + -I$(top_srcdir)/taglib/mpeg/id3v2/frames \ -I$(top_srcdir)/bindings/c LDADD = ../taglib/libtag.la diff --git a/taglib/flac/flacproperties.h b/taglib/flac/flacproperties.h index 0ccce2d6..59dfcd7c 100644 --- a/taglib/flac/flacproperties.h +++ b/taglib/flac/flacproperties.h @@ -26,6 +26,7 @@ #ifndef TAGLIB_FLACPROPERTIES_H #define TAGLIB_FLACPROPERTIES_H +#include "taglib_export.h" #include "audioproperties.h" namespace TagLib { @@ -41,7 +42,7 @@ namespace TagLib { * API. */ - class Properties : public AudioProperties + class TAGLIB_EXPORT Properties : public AudioProperties { public: /*! diff --git a/taglib/mpc/mpcproperties.h b/taglib/mpc/mpcproperties.h index 5ac2af9d..2835f24b 100644 --- a/taglib/mpc/mpcproperties.h +++ b/taglib/mpc/mpcproperties.h @@ -26,6 +26,7 @@ #ifndef TAGLIB_MPCPROPERTIES_H #define TAGLIB_MPCPROPERTIES_H +#include "taglib_export.h" #include "audioproperties.h" namespace TagLib { @@ -43,7 +44,7 @@ namespace TagLib { * API. */ - class Properties : public AudioProperties + class TAGLIB_EXPORT Properties : public AudioProperties { public: /*! diff --git a/taglib/mpeg/id3v1/id3v1tag.h b/taglib/mpeg/id3v1/id3v1tag.h index b697fea8..5d28d437 100644 --- a/taglib/mpeg/id3v1/id3v1tag.h +++ b/taglib/mpeg/id3v1/id3v1tag.h @@ -57,7 +57,7 @@ namespace TagLib { * \see ID3v1::Tag::setStringHandler() */ - class StringHandler + class TAGLIB_EXPORT StringHandler { public: // do not fix compiler warning about missing virtual destructor diff --git a/taglib/mpeg/id3v2/frames/commentsframe.h b/taglib/mpeg/id3v2/frames/commentsframe.h index c0653751..82f0cbd4 100644 --- a/taglib/mpeg/id3v2/frames/commentsframe.h +++ b/taglib/mpeg/id3v2/frames/commentsframe.h @@ -27,6 +27,7 @@ #define TAGLIB_COMMENTSFRAME_H #include +#include "taglib_export.h" namespace TagLib { @@ -39,7 +40,7 @@ namespace TagLib { * a language encoding, a description and a single text field. */ - class CommentsFrame : public Frame + class TAGLIB_EXPORT CommentsFrame : public Frame { friend class FrameFactory; diff --git a/taglib/mpeg/id3v2/frames/generalencapsulatedobjectframe.h b/taglib/mpeg/id3v2/frames/generalencapsulatedobjectframe.h index a403b11b..710c9ba5 100644 --- a/taglib/mpeg/id3v2/frames/generalencapsulatedobjectframe.h +++ b/taglib/mpeg/id3v2/frames/generalencapsulatedobjectframe.h @@ -30,6 +30,7 @@ #include #include +#include "taglib_export.h" namespace TagLib { @@ -46,7 +47,7 @@ namespace TagLib { * uniquely identifies the GEOB frame in the tag. */ - class GeneralEncapsulatedObjectFrame : public Frame + class TAGLIB_EXPORT GeneralEncapsulatedObjectFrame : public Frame { friend class FrameFactory; diff --git a/taglib/mpeg/id3v2/frames/relativevolumeframe.h b/taglib/mpeg/id3v2/frames/relativevolumeframe.h index 1ab15760..fbba54bc 100644 --- a/taglib/mpeg/id3v2/frames/relativevolumeframe.h +++ b/taglib/mpeg/id3v2/frames/relativevolumeframe.h @@ -28,6 +28,7 @@ #include #include +#include "taglib_export.h" namespace TagLib { @@ -45,7 +46,7 @@ namespace TagLib { * different channel types. */ - class RelativeVolumeFrame : public Frame + class TAGLIB_EXPORT RelativeVolumeFrame : public Frame { friend class FrameFactory; diff --git a/taglib/mpeg/id3v2/frames/textidentificationframe.h b/taglib/mpeg/id3v2/frames/textidentificationframe.h index 53fe4eb0..7905d9af 100644 --- a/taglib/mpeg/id3v2/frames/textidentificationframe.h +++ b/taglib/mpeg/id3v2/frames/textidentificationframe.h @@ -192,7 +192,7 @@ namespace TagLib { //! An ID3v2 custom text identification frame implementationx - class UserTextIdentificationFrame : public TextIdentificationFrame + class TAGLIB_EXPORT UserTextIdentificationFrame : public TextIdentificationFrame { friend class FrameFactory; diff --git a/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.h b/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.h index 2f3f96ca..6f1dedb0 100644 --- a/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.h +++ b/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.h @@ -40,7 +40,7 @@ namespace TagLib { //! An implementation of ID3v2 unique identifier frames - class UniqueFileIdentifierFrame : public ID3v2::Frame + class TAGLIB_EXPORT UniqueFileIdentifierFrame : public ID3v2::Frame { friend class FrameFactory; diff --git a/taglib/mpeg/id3v2/frames/unknownframe.h b/taglib/mpeg/id3v2/frames/unknownframe.h index 01915461..5688fd84 100644 --- a/taglib/mpeg/id3v2/frames/unknownframe.h +++ b/taglib/mpeg/id3v2/frames/unknownframe.h @@ -27,6 +27,7 @@ #define TAGLIB_UNKNOWNFRAME_H #include +#include "taglib_export.h" namespace TagLib { @@ -45,7 +46,7 @@ namespace TagLib { * to have your frame type supported through the standard ID3v2 mechanism. */ - class UnknownFrame : public Frame + class TAGLIB_EXPORT UnknownFrame : public Frame { friend class FrameFactory; diff --git a/taglib/mpeg/id3v2/id3v2extendedheader.h b/taglib/mpeg/id3v2/id3v2extendedheader.h index 6256e331..030400f7 100644 --- a/taglib/mpeg/id3v2/id3v2extendedheader.h +++ b/taglib/mpeg/id3v2/id3v2extendedheader.h @@ -26,6 +26,7 @@ #ifndef TAGLIB_ID3V2EXTENDEDHEADER_H #define TAGLIB_ID3V2EXTENDEDHEADER_H +#include "taglib_export.h" #include "tbytevector.h" #include "taglib.h" @@ -44,7 +45,7 @@ namespace TagLib { * (Structure, 3.2) */ - class ExtendedHeader + class TAGLIB_EXPORT ExtendedHeader { public: /*! diff --git a/taglib/mpeg/id3v2/id3v2footer.h b/taglib/mpeg/id3v2/id3v2footer.h index cdb453ed..8e17c7e8 100644 --- a/taglib/mpeg/id3v2/id3v2footer.h +++ b/taglib/mpeg/id3v2/id3v2footer.h @@ -26,6 +26,7 @@ #ifndef TAGLIB_ID3V2FOOTER_H #define TAGLIB_ID3V2FOOTER_H +#include "taglib_export.h" #include "tbytevector.h" namespace TagLib { @@ -46,7 +47,7 @@ namespace TagLib { * has been set in the ID3v2::Tag, TagLib will render a footer. */ - class Footer + class TAGLIB_EXPORT Footer { public: /*! diff --git a/taglib/mpeg/id3v2/id3v2framefactory.h b/taglib/mpeg/id3v2/id3v2framefactory.h index 3df1b23a..7e51ed7a 100644 --- a/taglib/mpeg/id3v2/id3v2framefactory.h +++ b/taglib/mpeg/id3v2/id3v2framefactory.h @@ -29,7 +29,6 @@ #include "taglib_export.h" #include "tbytevector.h" #include "id3v2frame.h" -#include "taglib_export.h" namespace TagLib { diff --git a/taglib/mpeg/mpegheader.h b/taglib/mpeg/mpegheader.h index 543248f2..cd9ac2e1 100644 --- a/taglib/mpeg/mpegheader.h +++ b/taglib/mpeg/mpegheader.h @@ -26,6 +26,8 @@ #ifndef TAGLIB_MPEGHEADER_H #define TAGLIB_MPEGHEADER_H +#include "taglib_export.h" + namespace TagLib { class ByteVector; @@ -41,7 +43,7 @@ namespace TagLib { * document as a reference. */ - class Header + class TAGLIB_EXPORT Header { public: /*! diff --git a/taglib/mpeg/mpegproperties.h b/taglib/mpeg/mpegproperties.h index 22334eab..0e9ea3ce 100644 --- a/taglib/mpeg/mpegproperties.h +++ b/taglib/mpeg/mpegproperties.h @@ -26,6 +26,7 @@ #ifndef TAGLIB_MPEGPROPERTIES_H #define TAGLIB_MPEGPROPERTIES_H +#include "taglib_export.h" #include "audioproperties.h" #include "mpegheader.h" @@ -44,7 +45,7 @@ namespace TagLib { * AudioProperties API. */ - class Properties : public AudioProperties + class TAGLIB_EXPORT Properties : public AudioProperties { public: /*! diff --git a/taglib/mpeg/xingheader.h b/taglib/mpeg/xingheader.h index f603ff3d..9d6b4ba0 100644 --- a/taglib/mpeg/xingheader.h +++ b/taglib/mpeg/xingheader.h @@ -27,6 +27,7 @@ #define TAGLIB_XINGHEADER_H #include "mpegheader.h" +#include "taglib_export.h" namespace TagLib { @@ -46,7 +47,7 @@ namespace TagLib { * and the XMMS sources as references. */ - class XingHeader + class TAGLIB_EXPORT XingHeader { public: /*! diff --git a/taglib/ogg/oggpage.h b/taglib/ogg/oggpage.h index 7e3da17e..87ae1412 100644 --- a/taglib/ogg/oggpage.h +++ b/taglib/ogg/oggpage.h @@ -26,6 +26,7 @@ #ifndef TAGLIB_OGGPAGE_H #define TAGLIB_OGGPAGE_H +#include "taglib_export.h" #include "tbytevectorlist.h" namespace TagLib { @@ -48,7 +49,7 @@ namespace TagLib { * could potentially be useful for non-meta data purposes. */ - class Page + class TAGLIB_EXPORT Page { public: /*! diff --git a/taglib/ogg/vorbis/vorbisproperties.h b/taglib/ogg/vorbis/vorbisproperties.h index dc821f93..be28f6f2 100644 --- a/taglib/ogg/vorbis/vorbisproperties.h +++ b/taglib/ogg/vorbis/vorbisproperties.h @@ -26,6 +26,7 @@ #ifndef TAGLIB_VORBISPROPERTIES_H #define TAGLIB_VORBISPROPERTIES_H +#include "taglib_export.h" #include "audioproperties.h" namespace TagLib { @@ -52,7 +53,7 @@ namespace TagLib { * API. */ - class Properties : public AudioProperties + class TAGLIB_EXPORT Properties : public AudioProperties { public: /*! diff --git a/taglib/toolkit/tbytevector.h b/taglib/toolkit/tbytevector.h index 121cc996..a06f5a1f 100644 --- a/taglib/toolkit/tbytevector.h +++ b/taglib/toolkit/tbytevector.h @@ -398,6 +398,6 @@ namespace TagLib { * \relates TagLib::ByteVector * Streams the ByteVector \a v to the output stream \a s. */ -std::ostream &operator<<(std::ostream &s, const TagLib::ByteVector &v); +TAGLIB_EXPORT std::ostream &operator<<(std::ostream &s, const TagLib::ByteVector &v); #endif diff --git a/taglib/toolkit/tbytevectorlist.h b/taglib/toolkit/tbytevectorlist.h index cde74ba2..5365f5a9 100644 --- a/taglib/toolkit/tbytevectorlist.h +++ b/taglib/toolkit/tbytevectorlist.h @@ -26,6 +26,7 @@ #ifndef TAGLIB_BYTEVECTORLIST_H #define TAGLIB_BYTEVECTORLIST_H +#include "taglib_export.h" #include "tbytevector.h" #include "tlist.h" @@ -37,7 +38,7 @@ namespace TagLib { * A List specialization with some handy features useful for ByteVectors. */ - class ByteVectorList : public List + class TAGLIB_EXPORT ByteVectorList : public List { public: diff --git a/taglib/toolkit/tstring.h b/taglib/toolkit/tstring.h index 332be6c3..1f990755 100644 --- a/taglib/toolkit/tstring.h +++ b/taglib/toolkit/tstring.h @@ -419,21 +419,21 @@ namespace TagLib { * * Concatenates \a s1 and \a s2 and returns the result as a string. */ -const TagLib::String operator+(const TagLib::String &s1, const TagLib::String &s2); +TAGLIB_EXPORT const TagLib::String operator+(const TagLib::String &s1, const TagLib::String &s2); /*! * \relates TagLib::String * * Concatenates \a s1 and \a s2 and returns the result as a string. */ -const TagLib::String operator+(const char *s1, const TagLib::String &s2); +TAGLIB_EXPORT const TagLib::String operator+(const char *s1, const TagLib::String &s2); /*! * \relates TagLib::String * * Concatenates \a s1 and \a s2 and returns the result as a string. */ -const TagLib::String operator+(const TagLib::String &s1, const char *s2); +TAGLIB_EXPORT const TagLib::String operator+(const TagLib::String &s1, const char *s2); /*!