From 8f8ef3788f606696b47b4983638795f520ad77ae Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Thu, 2 May 2013 23:03:13 +0900 Subject: [PATCH] Prefixed public variables --- CMakeLists.txt | 2 +- ConfigureChecks.cmake | 81 +++++++++++++++---------- taglib/mpeg/id3v2/id3v2frame.cpp | 4 +- taglib/mpeg/id3v2/id3v2framefactory.cpp | 2 +- taglib/taglib_config.h.cmake | 40 ++++++------ taglib/toolkit/taglib.h | 74 +++++++++------------- taglib/toolkit/tstring.cpp | 20 +----- tests/utils.h | 2 +- 8 files changed, 101 insertions(+), 124 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index efbb3efb..5d1dc686 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ option(BUILD_EXAMPLES "Build the examples" OFF) option(NO_ITUNES_HACKS "Disable workarounds for iTunes bugs" OFF) -set(TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests/") +set(TAGLIB_TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests/") ## the following are directories where stuff will be installed to set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)") diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index 67b99d88..bda45fe1 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -7,6 +7,28 @@ include(CheckTypeSize) include(CheckCXXSourceCompiles) include(TestBigEndian) +# Check if the size of integral types are suitable. + +check_type_size("short" SIZEOF_SHORT) +if(NOT ${SIZEOF_SHORT} EQUAL 2) + MESSAGE(FATAL_ERROR "TagLib requires that short is 16-bit wide.") +endif() + +check_type_size("int" SIZEOF_INT) +if(NOT ${SIZEOF_INT} EQUAL 4) + MESSAGE(FATAL_ERROR "TagLib requires that int is 32-bit wide.") +endif() + +check_type_size("long long" SIZEOF_LONGLONG) +if(NOT ${SIZEOF_LONGLONG} EQUAL 8) + MESSAGE(FATAL_ERROR "TagLib requires that long long is 64-bit wide.") +endif() + +check_type_size("wchar_t" SIZEOF_WCHAR_T) +if(${SIZEOF_WCHAR_T} LESS 2) + MESSAGE(FATAL_ERROR "TagLib requires that wchar_t is sufficient to store a UTF-16 char.") +endif() + # Determine the CPU byte order. test_big_endian(TAGLIB_BIG_ENDIAN) @@ -15,13 +37,6 @@ if(NOT TAGLIB_BIG_ENDIAN) set(TAGLIB_LITTLE_ENDIAN 1) endif() -# Determine the size of integral types. - -check_type_size("short" SIZEOF_SHORT) -check_type_size("int" SIZEOF_INT) -check_type_size("long long" SIZEOF_LONGLONG) -check_type_size("wchar_t" SIZEOF_WCHAR_T) - # Determine if your compiler supports std::wstring. check_cxx_source_compiles(" @@ -30,7 +45,7 @@ check_cxx_source_compiles(" std::wstring x(L\"ABC\"); return 0; } -" HAVE_STD_WSTRING) +" TAGLIB_HAVE_STD_WSTRING) # Determine which kind of atomic operations your compiler supports. @@ -42,9 +57,9 @@ check_cxx_source_compiles(" x.fetch_sub(1); return 0; } -" HAVE_STD_ATOMIC) +" TAGLIB_HAVE_STD_ATOMIC) -if(NOT HAVE_STD_ATOMIC) +if(NOT TAGLIB_HAVE_STD_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -53,9 +68,9 @@ if(NOT HAVE_STD_ATOMIC) x.fetch_sub(1); return 0; } - " HAVE_BOOST_ATOMIC) + " TAGLIB_HAVE_BOOST_ATOMIC) - if(NOT HAVE_BOOST_ATOMIC) + if(NOT TAGLIB_HAVE_BOOST_ATOMIC) check_cxx_source_compiles(" int main() { volatile int x; @@ -63,9 +78,9 @@ if(NOT HAVE_STD_ATOMIC) int y = __sync_sub_and_fetch(&x, 1); return 0; } - " HAVE_GCC_ATOMIC) + " TAGLIB_HAVE_GCC_ATOMIC) - if(NOT HAVE_GCC_ATOMIC) + if(NOT TAGLIB_HAVE_GCC_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -74,9 +89,9 @@ if(NOT HAVE_STD_ATOMIC) int32_t y = OSAtomicDecrement32Barrier(&x); return 0; } - " HAVE_MAC_ATOMIC) + " TAGLIB_HAVE_MAC_ATOMIC) - if(NOT HAVE_MAC_ATOMIC) + if(NOT TAGLIB_HAVE_MAC_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -85,9 +100,9 @@ if(NOT HAVE_STD_ATOMIC) LONG y = InterlockedDecrement(&x); return 0; } - " HAVE_WIN_ATOMIC) + " TAGLIB_HAVE_WIN_ATOMIC) - if(NOT HAVE_WIN_ATOMIC) + if(NOT TAGLIB_HAVE_WIN_ATOMIC) check_cxx_source_compiles(" #include int main() { @@ -96,7 +111,7 @@ if(NOT HAVE_STD_ATOMIC) int y = __sync_sub_and_fetch(&x, 1); return 0; } - " HAVE_IA64_ATOMIC) + " TAGLIB_HAVE_IA64_ATOMIC) endif() endif() endif() @@ -112,23 +127,23 @@ check_cxx_source_compiles(" __builtin_bswap16(0); return 0; } -" HAVE_GCC_BYTESWAP_16) +" TAGLIB_HAVE_GCC_BYTESWAP_16) check_cxx_source_compiles(" int main() { __builtin_bswap32(0); return 0; } -" HAVE_GCC_BYTESWAP_32) +" TAGLIB_HAVE_GCC_BYTESWAP_32) check_cxx_source_compiles(" int main() { __builtin_bswap64(0); return 0; } -" HAVE_GCC_BYTESWAP_64) +" TAGLIB_HAVE_GCC_BYTESWAP_64) -if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP_64) +if(NOT TAGLIB_HAVE_GCC_BYTESWAP_16 OR NOT TAGLIB_HAVE_GCC_BYTESWAP_32 OR NOT TAGLIB_HAVE_GCC_BYTESWAP_64) check_cxx_source_compiles(" #include int main() { @@ -137,9 +152,9 @@ if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP __bswap_64(0); return 0; } - " HAVE_GLIBC_BYTESWAP) + " TAGLIB_HAVE_GLIBC_BYTESWAP) - if(NOT HAVE_GLIBC_BYTESWAP) + if(NOT TAGLIB_HAVE_GLIBC_BYTESWAP) check_cxx_source_compiles(" #include int main() { @@ -148,9 +163,9 @@ if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP _byteswap_uint64(0); return 0; } - " HAVE_MSC_BYTESWAP) + " TAGLIB_HAVE_MSC_BYTESWAP) - if(NOT HAVE_MSC_BYTESWAP) + if(NOT TAGLIB_HAVE_MSC_BYTESWAP) check_cxx_source_compiles(" #include int main() { @@ -159,9 +174,9 @@ if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP OSSwapInt64(0); return 0; } - " HAVE_MAC_BYTESWAP) + " TAGLIB_HAVE_MAC_BYTESWAP) - if(NOT HAVE_MAC_BYTESWAP) + if(NOT TAGLIB_HAVE_MAC_BYTESWAP) check_cxx_source_compiles(" #include int main() { @@ -170,7 +185,7 @@ if(NOT HAVE_GCC_BYTESWAP_16 OR NOT HAVE_GCC_BYTESWAP_32 OR NOT HAVE_GCC_BYTESWAP swap64(0); return 0; } - " HAVE_OPENBSD_BYTESWAP) + " TAGLIB_HAVE_OPENBSD_BYTESWAP) endif() endif() endif() @@ -184,15 +199,15 @@ check_cxx_source_compiles(" std::codecvt_utf8_utf16 x; return 0; } -" HAVE_STD_CODECVT) +" TAGLIB_HAVE_STD_CODECVT) # Check for libz using the cmake supplied FindZLIB.cmake find_package(ZLIB) if(ZLIB_FOUND) - set(HAVE_ZLIB 1) + set(TAGLIB_HAVE_ZLIB 1) else() - set(HAVE_ZLIB 0) + set(TAGLIB_HAVE_ZLIB 0) endif() diff --git a/taglib/mpeg/id3v2/id3v2frame.cpp b/taglib/mpeg/id3v2/id3v2frame.cpp index 6333f9d9..e79c47e3 100644 --- a/taglib/mpeg/id3v2/id3v2frame.cpp +++ b/taglib/mpeg/id3v2/id3v2frame.cpp @@ -25,7 +25,7 @@ #include "taglib_config.h" -#if HAVE_ZLIB +#if TAGLIB_HAVE_ZLIB #include #endif @@ -248,7 +248,7 @@ ByteVector Frame::fieldData(const ByteVector &frameData) const frameDataOffset += 4; } -#if HAVE_ZLIB +#if TAGLIB_HAVE_ZLIB if(d->header->compression() && !d->header->encryption()) { diff --git a/taglib/mpeg/id3v2/id3v2framefactory.cpp b/taglib/mpeg/id3v2/id3v2framefactory.cpp index 5c223e1a..d5a173c7 100644 --- a/taglib/mpeg/id3v2/id3v2framefactory.cpp +++ b/taglib/mpeg/id3v2/id3v2framefactory.cpp @@ -133,7 +133,7 @@ Frame *FrameFactory::createFrame(const ByteVector &origData, Header *tagHeader) // TagLib doesn't mess with encrypted frames, so just treat them // as unknown frames. -#if HAVE_ZLIB == 0 +#if !defined(TAGLIB_HAVE_ZLIB) || TAGLIB_HAVE_ZLIB == 0 if(header->compression()) { debug("Compressed frames are currently not supported."); return new UnknownFrame(data, header); diff --git a/taglib/taglib_config.h.cmake b/taglib/taglib_config.h.cmake index c97e6b6b..ce8c6112 100644 --- a/taglib/taglib_config.h.cmake +++ b/taglib/taglib_config.h.cmake @@ -4,39 +4,33 @@ #cmakedefine TAGLIB_LITTLE_ENDIAN 1 #cmakedefine TAGLIB_BIG_ENDIAN 1 -/* Size of integral types */ -#cmakedefine SIZEOF_SHORT ${SIZEOF_SHORT} -#cmakedefine SIZEOF_INT ${SIZEOF_INT} -#cmakedefine SIZEOF_LONGLONG ${SIZEOF_LONGLONG} -#cmakedefine SIZEOF_WCHAR_T ${SIZEOF_WCHAR_T} - /* Defined if your compiler supports std::wstring */ -#cmakedefine HAVE_STD_WSTRING 1 +#cmakedefine TAGLIB_HAVE_STD_WSTRING 1 /* Defined if your compiler supports some atomic operations */ -#cmakedefine HAVE_STD_ATOMIC 1 -#cmakedefine HAVE_BOOST_ATOMIC 1 -#cmakedefine HAVE_GCC_ATOMIC 1 -#cmakedefine HAVE_MAC_ATOMIC 1 -#cmakedefine HAVE_WIN_ATOMIC 1 -#cmakedefine HAVE_IA64_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_STD_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_BOOST_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_GCC_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_MAC_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_WIN_ATOMIC 1 +#cmakedefine TAGLIB_HAVE_IA64_ATOMIC 1 /* Defined if your compiler supports some byte swap functions */ -#cmakedefine HAVE_GCC_BYTESWAP_16 1 -#cmakedefine HAVE_GCC_BYTESWAP_32 1 -#cmakedefine HAVE_GCC_BYTESWAP_64 1 -#cmakedefine HAVE_GLIBC_BYTESWAP 1 -#cmakedefine HAVE_MSC_BYTESWAP 1 -#cmakedefine HAVE_MAC_BYTESWAP 1 -#cmakedefine HAVE_OPENBSD_BYTESWAP 1 +#cmakedefine TAGLIB_HAVE_GCC_BYTESWAP_16 1 +#cmakedefine TAGLIB_HAVE_GCC_BYTESWAP_32 1 +#cmakedefine TAGLIB_HAVE_GCC_BYTESWAP_64 1 +#cmakedefine TAGLIB_HAVE_GLIBC_BYTESWAP 1 +#cmakedefine TAGLIB_HAVE_MSC_BYTESWAP 1 +#cmakedefine TAGLIB_HAVE_MAC_BYTESWAP 1 +#cmakedefine TAGLIB_HAVE_OPENBSD_BYTESWAP 1 /* Defined if your compiler supports codecvt */ -#cmakedefine HAVE_STD_CODECVT 1 +#cmakedefine TAGLIB_HAVE_STD_CODECVT 1 /* Defined if you have libz */ -#cmakedefine HAVE_ZLIB 1 +#cmakedefine TAGLIB_HAVE_ZLIB 1 #define TAGLIB_WITH_ASF 1 #define TAGLIB_WITH_MP4 1 -#cmakedefine TESTS_DIR "@TESTS_DIR@" +#cmakedefine TAGLIB_TESTS_DIR "@TESTS_DIR@" diff --git a/taglib/toolkit/taglib.h b/taglib/toolkit/taglib.h index da725f97..044d5eda 100755 --- a/taglib/toolkit/taglib.h +++ b/taglib/toolkit/taglib.h @@ -32,26 +32,6 @@ #define TAGLIB_MINOR_VERSION 8 #define TAGLIB_PATCH_VERSION 0 -// Check the widths of integral types. - -#if SIZEOF_SHORT != 2 -# error TagLib requires that short is 16-bit wide. -#endif - -#if SIZEOF_INT != 4 -# error TagLib requires that int is 32-bit wide. -#endif - -#if SIZEOF_LONGLONG != 8 -# error TagLib requires that long long is 64-bit wide. -#endif - -#if SIZEOF_WCHAR_T < 2 -# error TagLib requires that wchar_t is sufficient to store a UTF-16 char. -#endif - -#include - #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 1)) #define TAGLIB_IGNORE_MISSING_DESTRUCTOR _Pragma("GCC diagnostic ignored \"-Wnon-virtual-dtor\"") #else @@ -64,23 +44,25 @@ #define TAGLIB_CONSTRUCT_BITSET(x) static_cast(x) #endif +#include + // Atomic increment/decrement operations -#if defined(HAVE_STD_ATOMIC) +#if defined(TAGLIB_HAVE_STD_ATOMIC) # include # define TAGLIB_ATOMIC_INT std::atomic # define TAGLIB_ATOMIC_INC(x) x.fetch_add(1) # define TAGLIB_ATOMIC_DEC(x) (x.fetch_sub(1) - 1) -#elif defined(HAVE_BOOST_ATOMIC) +#elif defined(TAGLIB_HAVE_BOOST_ATOMIC) # include # define TAGLIB_ATOMIC_INT boost::atomic # define TAGLIB_ATOMIC_INC(x) x.fetch_add(1) # define TAGLIB_ATOMIC_DEC(x) (x.fetch_sub(1) - 1) -#elif defined(HAVE_GCC_ATOMIC) +#elif defined(TAGLIB_HAVE_GCC_ATOMIC) # define TAGLIB_ATOMIC_INT int # define TAGLIB_ATOMIC_INC(x) __sync_add_and_fetch(&x, 1) # define TAGLIB_ATOMIC_DEC(x) __sync_sub_and_fetch(&x, 1) -#elif defined(HAVE_WIN_ATOMIC) +#elif defined(TAGLIB_HAVE_WIN_ATOMIC) # if !defined(NOMINMAX) # define NOMINMAX # endif @@ -88,12 +70,12 @@ # define TAGLIB_ATOMIC_INT long # define TAGLIB_ATOMIC_INC(x) InterlockedIncrement(&x) # define TAGLIB_ATOMIC_DEC(x) InterlockedDecrement(&x) -#elif defined(HAVE_MAC_ATOMIC) +#elif defined(TAGLIB_HAVE_MAC_ATOMIC) # include # define TAGLIB_ATOMIC_INT int32_t # define TAGLIB_ATOMIC_INC(x) OSAtomicIncrement32Barrier(&x) # define TAGLIB_ATOMIC_DEC(x) OSAtomicDecrement32Barrier(&x) -#elif defined(HAVE_IA64_ATOMIC) +#elif defined(TAGLIB_HAVE_IA64_ATOMIC) # include # define TAGLIB_ATOMIC_INT int # define TAGLIB_ATOMIC_INC(x) __sync_add_and_fetch(&x, 1) @@ -106,49 +88,49 @@ // Optimized byte swap functions. -#if defined(HAVE_MSC_BYTESWAP) +#if defined(TAGLIB_HAVE_MSC_BYTESWAP) # include -#elif defined(HAVE_GLIBC_BYTESWAP) +#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) # include -#elif defined(HAVE_MAC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) # include -#elif defined(HAVE_OPENBSD_BYTESWAP) +#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) # include #endif -#if defined(HAVE_GCC_BYTESWAP_16) +#if defined(TAGLIB_HAVE_GCC_BYTESWAP_16) # define TAGLIB_BYTESWAP_16(x) __builtin_bswap16(x) -#elif defined(HAVE_MSC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MSC_BYTESWAP) # define TAGLIB_BYTESWAP_16(x) _byteswap_ushort(x) -#elif defined(HAVE_GLIBC_BYTESWAP) +#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) # define TAGLIB_BYTESWAP_16(x) __bswap_16(x) -#elif defined(HAVE_MAC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) # define TAGLIB_BYTESWAP_16(x) OSSwapInt16(x) -#elif defined(HAVE_OPENBSD_BYTESWAP) +#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) # define TAGLIB_BYTESWAP_16(x) swap16(x) #endif -#if defined(HAVE_GCC_BYTESWAP_32) +#if defined(TAGLIB_HAVE_GCC_BYTESWAP_32) # define TAGLIB_BYTESWAP_32(x) __builtin_bswap32(x) -#elif defined(HAVE_MSC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MSC_BYTESWAP) # define TAGLIB_BYTESWAP_32(x) _byteswap_ulong(x) -#elif defined(HAVE_GLIBC_BYTESWAP) +#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) # define TAGLIB_BYTESWAP_32(x) __bswap_32(x) -#elif defined(HAVE_MAC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) # define TAGLIB_BYTESWAP_32(x) OSSwapInt32(x) -#elif defined(HAVE_OPENBSD_BYTESWAP) +#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) # define TAGLIB_BYTESWAP_32(x) swap32(x) #endif -#if defined(HAVE_GCC_BYTESWAP_64) +#if defined(TAGLIB_HAVE_GCC_BYTESWAP_64) # define TAGLIB_BYTESWAP_64(x) __builtin_bswap64(x) -#elif defined(HAVE_MSC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MSC_BYTESWAP) # define TAGLIB_BYTESWAP_64(x) _byteswap_uint64(x) -#elif defined(HAVE_GLIBC_BYTESWAP) +#elif defined(TAGLIB_HAVE_GLIBC_BYTESWAP) # define TAGLIB_BYTESWAP_64(x) __bswap_64(x) -#elif defined(HAVE_MAC_BYTESWAP) +#elif defined(TAGLIB_HAVE_MAC_BYTESWAP) # define TAGLIB_BYTESWAP_64(x) OSSwapInt64(x) -#elif defined(HAVE_OPENBSD_BYTESWAP) +#elif defined(TAGLIB_HAVE_OPENBSD_BYTESWAP) # define TAGLIB_BYTESWAP_64(x) swap64(x) #endif @@ -179,7 +161,7 @@ namespace TagLib { * Unfortunately std::wstring isn't defined on some systems, (i.e. GCC < 3) * so I'm providing something here that should be constant. */ -#ifdef HAVE_STD_WSTRING +#ifdef TAGLIB_HAVE_STD_WSTRING typedef std::wstring wstring; #else typedef std::basic_string wstring; diff --git a/taglib/toolkit/tstring.cpp b/taglib/toolkit/tstring.cpp index eaf5291e..7d5535e7 100644 --- a/taglib/toolkit/tstring.cpp +++ b/taglib/toolkit/tstring.cpp @@ -32,13 +32,7 @@ #include #include -// x86 CPUs are alignment-tolerant or allow pointer casts from smaller types to larger types. -#if defined(__i386__) || defined(_M_IX86) || defined(__amd64) || defined(__amd64__) \ - || defined(_M_AMD64) || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) -# define TAGLIB_ALIGNMENT_TOLERANT 1 -#endif - -#ifdef HAVE_STD_CODECVT +#ifdef TAGLIB_HAVE_STD_CODECVT # include #else # include "unicode.h" @@ -66,7 +60,7 @@ namespace void UTF16toUTF8(const wchar_t *src, size_t srcLength, char *dst, size_t dstLength) { -#ifdef HAVE_STD_CODECVT +#ifdef TAGLIB_HAVE_STD_CODECVT typedef std::codecvt_utf8_utf16 utf8_utf16_t; @@ -112,7 +106,7 @@ namespace void UTF8toUTF16(const char *src, size_t srcLength, wchar_t *dst, size_t dstLength) { -#ifdef HAVE_STD_CODECVT +#ifdef TAGLIB_HAVE_STD_CODECVT typedef std::codecvt_utf8_utf16 utf8_utf16_t; @@ -813,12 +807,6 @@ void String::copyFromUTF16(const wchar_t *s, size_t length, Type t) void String::copyFromUTF16(const char *s, size_t length, Type t) { -#if SIZEOF_WCHAR_T == 2 && defined(TAGLIB_ALIGNMENT_TOLERANT) - - copyFromUTF16(reinterpret_cast(s), length / 2, t); - -#else - bool swap; if(t == UTF16) { if(length < 2) { @@ -850,8 +838,6 @@ void String::copyFromUTF16(const char *s, size_t length, Type t) d->data[i] = swap ? combine(*s, *(s + 1)) : combine(*(s + 1), *s); s += 2; } - -#endif } #ifdef TAGLIB_LITTLE_ENDIAN diff --git a/tests/utils.h b/tests/utils.h index 5de051e7..3af9b2f6 100644 --- a/tests/utils.h +++ b/tests/utils.h @@ -17,7 +17,7 @@ using namespace std; inline string testFilePath(const string &filename) { - return string(TESTS_DIR "data/") + filename; + return string(TAGLIB_TESTS_DIR "data/") + filename; } #define TEST_FILE_PATH_C(f) testFilePath(f).c_str()