]> granicus.if.org Git - taglib/commitdiff
Removed the dependency on shlwapi.dll in Win32
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Thu, 6 Jun 2013 04:45:23 +0000 (13:45 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Thu, 6 Jun 2013 04:45:23 +0000 (13:45 +0900)
ConfigureChecks.cmake
cmake/modules/FindShlwapi.cmake [deleted file]
taglib/CMakeLists.txt
taglib/fileref.cpp
taglib/toolkit/tfilestream.cpp
taglib/toolkit/tiostream.cpp
taglib/toolkit/tiostream.h

index 192c1441ccc2f8bc3fbb6857bd46fb16c53fd3ab..b0f164a9d56a35e93949d74f0a987b7e233c82f5 100755 (executable)
@@ -219,15 +219,6 @@ endif()
 
 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
 
-if(WIN32 AND NOT MSVC)
-  find_package(SHLWAPI)
-  if(SHLWAPI_FOUND)
-    set(HAVE_SHLWAPI 1)
-  else()
-    set(HAVE_SHLWAPI 0)
-  endif()
-endif()
-
 find_package(CppUnit)
 if(NOT CppUnit_FOUND AND BUILD_TESTS)
   message(STATUS "CppUnit not found, disabling tests.")
diff --git a/cmake/modules/FindShlwapi.cmake b/cmake/modules/FindShlwapi.cmake
deleted file mode 100755 (executable)
index cba253f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#  *\r
-#  * It is what it is, you can do with it as you please.\r
-#  *\r
-#  * Just don't blame me if it teaches your computer to smoke!\r
-#  *\r
-#  *  -Enjoy\r
-#  *  fh :)_~\r
-#  *\r
-FIND_PATH(SHLWAPI_INCLUDE_DIR shlwapi.h)\r
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(SHLWAPI REQUIRED_VARS SHLWAPI_LIBRARY SHLWAPI_INCLUDE_DIR)\r
-IF(SHLWAPI_FOUND)\r
-  SET(SHLWAPI_LIBRARIES ${SHLWAPI_LIBRARY} )\r
-ENDIF(SHLWAPI_FOUND)\r
-\r
index 1753fa33df9992a5e4b3995a0d7acefb12e5cfb4..352f7e2ed59c061d044903f805a445371b6296a8 100755 (executable)
@@ -30,10 +30,6 @@ if(ZLIB_FOUND)
   include_directories(${ZLIB_INCLUDE_DIR})
 endif()
 
-if(NOT MSVC AND SHLWAPI_FOUND)
-  include_directories(${SHLWAPI_INCLUDE_DIR})
-endif()
-
 set(tag_HDRS
   tag.h
   fileref.h
@@ -315,14 +311,6 @@ if(ZLIB_FOUND)
        target_link_libraries(tag ${ZLIB_LIBRARIES})
 endif()
 
-if(MSVC)
-  target_link_libraries(tag shlwapi.lib)
-else()
-  if(SHLWAPI_FOUND)
-    target_link_libraries(tag ${SHLWAPI_LIBRARIES})
-  endif()
-endif()
-
 set_target_properties(tag PROPERTIES
   VERSION ${TAGLIB_SOVERSION_MAJOR}.${TAGLIB_SOVERSION_MINOR}.${TAGLIB_SOVERSION_PATCH}
   SOVERSION ${TAGLIB_SOVERSION_MAJOR}
index 157ba2ee5dda18707b5fde7eb2bfc582fe663478..d13a283791701daf3a2178f358564192a4dd20b7 100644 (file)
 
 #include "taglib_config.h"
 
-#ifdef _WIN32
-# include <Shlwapi.h>
-#endif 
-
 #include <tfile.h>
 #include <tstring.h>
 #include <tdebug.h>
@@ -222,29 +218,21 @@ File *FileRef::create(FileName fileName, bool readAudioProperties,
   // Ok, this is really dumb for now, but it works for testing.
 
   String ext;
-
+  {
 #ifdef _WIN32
-  // Avoids direct conversion from FileName to String
-  // because String can't decode strings in local encodings properly.
 
-  if(!fileName.wstr().empty()) {
-    const wchar_t *pext = PathFindExtensionW(fileName.wstr().c_str());
-    if(*pext == L'.')
-      ext = String(pext + 1).upper();
-  }
-  else {
-    const char *pext = PathFindExtensionA(fileName.str().c_str());
-    if(*pext == '.')
-      ext = String(pext + 1).upper();
-  }
+    String s = fileName.toString();
+
 #else
-  {
+
     String s = fileName;
+
+ #endif
+
     const int pos = s.rfind(".");
     if(pos != -1)
       ext = s.substr(pos + 1).upper();
   }
-#endif
 
   // If this list is updated, the method defaultFileExtensions() should also be
   // updated.  However at some point that list should be created at the same time
index 3bf68e0e697020fb7bf8f5e85b21fd17865eb82d..eae5257339c374703c898c2165cf3bee748e8a5d 100644 (file)
@@ -83,35 +83,6 @@ namespace
       return 0;
   }
 
-# ifndef NDEBUG
-
-  // Convert a string in a local encoding into a UTF-16 string.
-
-  // Debugging use only. In actual use, file names in local encodings are passed to 
-  // CreateFileA() without any conversions.
-
-  String fileNameToString(const FileName &name)
-  {
-    if(!name.wstr().empty()) {
-      return String(name.wstr());
-    } 
-    else if(!name.str().empty()) {
-      const int len = MultiByteToWideChar(CP_ACP, 0, name.str().c_str(), -1, NULL, 0);
-      if(len == 0)
-        return String::null;
-
-      wstring wstr(len, L'\0');
-      MultiByteToWideChar(CP_ACP, 0, name.str().c_str(), -1, &wstr[0], len);
-
-      return String(wstr);
-    }
-    else {
-      return String::null;
-    }
-  }
-
-# endif
-
 #else   // _WIN32
 
   struct FileNameHandle : public std::string
@@ -183,7 +154,7 @@ FileStream::FileStream(FileName fileName, bool openReadOnly)
   if(d->file == InvalidFileHandle) 
   {
 # ifdef _WIN32
-    debug("Could not open file " + fileNameToString(fileName));
+    debug("Could not open file " + fileName.toString());
 # else
     debug("Could not open file " + String(static_cast<const char *>(d->name)));
 # endif 
index ee4e4a610fe16fa0e0b65c50ba3e142083e2df30..3069bb53c8dc04c51fd5dfbb19215aeeaf05d7e8 100644 (file)
@@ -124,6 +124,27 @@ const std::string &FileName::str() const
   return d->name; 
 }  
 
+String FileName::toString() const
+{
+  if(!d->wname.empty()) {
+    return String(d->wname);
+  } 
+  else if(!d->name.empty()) {
+    const int len = MultiByteToWideChar(CP_ACP, 0, d->name.c_str(), -1, NULL, 0);
+    if(len == 0)
+      return String::null;
+
+    std::vector<wchar_t> buf(len);
+    MultiByteToWideChar(CP_ACP, 0, d->name.c_str(), -1, &buf[0], len);
+
+    return String(&buf[0]);
+  }
+  else {
+    return String::null;
+  }
+}
+
+
 #endif  // _WIN32
 
 ////////////////////////////////////////////////////////////////////////////////
index 498b3a4522432e1e8a0ed6052e249fc7f1519081..22147f8a643c1999255ea0a5b1cd8500ba67c4a0 100644 (file)
@@ -48,6 +48,8 @@ namespace TagLib {
     const std::wstring &wstr() const;
     const std::string  &str() const; 
 
+    String toString() const;
+
   private:
     class FileNamePrivate;
     FileNamePrivate *d;