[vlc-commits] contrib: taglib: only use APIs in winstore builds

Steve Lhomme git at videolan.org
Mon May 18 16:19:00 CEST 2020


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Tue Apr 28 12:49:27 2020 +0200| [1730fe70e72ff41c6ca3cc78befc30142db8ec4f] | committer: Steve Lhomme

contrib: taglib: only use APIs in winstore builds

- CreateFile2 where CreateFileW is used
- GetFileInformationByHandleEx instead of GetFileSize (which is what winstore
  compat did)

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1730fe70e72ff41c6ca3cc78befc30142db8ec4f
---

 ...InformationByHandleEx-on-newer-builds-of-.patch | 39 ++++++++++++++++++++
 .../0003-don-t-use-CreateFile-in-UWP-builds.patch  | 43 ++++++++++++++++++++++
 contrib/src/taglib/rules.mak                       |  5 +--
 contrib/src/taglib/unicode.patch                   | 13 -------
 4 files changed, 84 insertions(+), 16 deletions(-)

diff --git a/contrib/src/taglib/0002-use-GetFileInformationByHandleEx-on-newer-builds-of-.patch b/contrib/src/taglib/0002-use-GetFileInformationByHandleEx-on-newer-builds-of-.patch
new file mode 100644
index 0000000000..5519d5e21f
--- /dev/null
+++ b/contrib/src/taglib/0002-use-GetFileInformationByHandleEx-on-newer-builds-of-.patch
@@ -0,0 +1,39 @@
+From 9c02a2c245bed1d70dbd80b0e63abbcdecb74761 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at ycbcr.xyz>
+Date: Fri, 15 May 2020 09:29:55 +0200
+Subject: [PATCH 2/3] use GetFileInformationByHandleEx on newer builds of
+ Windows
+
+It's available since Vista and UWP builds that don't have GetFileSize.
+
+See https://docs.microsoft.com/en-us/uwp/win32-and-com/win32-apis
+---
+ taglib/toolkit/tfilestream.cpp | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/taglib/toolkit/tfilestream.cpp b/taglib/toolkit/tfilestream.cpp
+index 4b448271..ad4443ea 100644
+--- a/taglib/toolkit/tfilestream.cpp
++++ b/taglib/toolkit/tfilestream.cpp
+@@ -441,10 +441,18 @@ long FileStream::length()
+ #ifdef _WIN32
+ 
+   SetLastError(NO_ERROR);
++#if _WIN32_WINNT < _WIN32_WINNT_VISTA
+   const DWORD fileSize = GetFileSize(d->file, NULL);
+   if(GetLastError() == NO_ERROR) {
+     return static_cast<long>(fileSize);
+   }
++#else // _WIN32_WINNT_VISTA
++  FILE_STANDARD_INFO fStdInfo;
++  BOOL success = GetFileInformationByHandleEx(d->file, FileStandardInfo, (LPVOID)&fStdInfo, sizeof(FILE_STANDARD_INFO));
++  if(success) {
++    return static_cast<long>(fStdInfo.EndOfFile.LowPart);
++  }
++#endif // _WIN32_WINNT_VISTA
+   else {
+     debug("FileStream::length() -- Failed to get the file size.");
+     return 0;
+-- 
+2.26.0.windows.1
+
diff --git a/contrib/src/taglib/0003-don-t-use-CreateFile-in-UWP-builds.patch b/contrib/src/taglib/0003-don-t-use-CreateFile-in-UWP-builds.patch
new file mode 100644
index 0000000000..826eb9d056
--- /dev/null
+++ b/contrib/src/taglib/0003-don-t-use-CreateFile-in-UWP-builds.patch
@@ -0,0 +1,43 @@
+From a9024bd18ce20653616e04702b5e220de56b6b2c Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at ycbcr.xyz>
+Date: Fri, 15 May 2020 09:32:21 +0200
+Subject: [PATCH 3/3] don't use CreateFile in UWP builds
+
+CreateFile2 is available for such builds with more internal restrictions.
+
+See https://docs.microsoft.com/en-us/uwp/win32-and-com/win32-apis
+https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfile2
+---
+ taglib/toolkit/tfilestream.cpp | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/taglib/toolkit/tfilestream.cpp b/taglib/toolkit/tfilestream.cpp
+index ad4443ea..10cd8d56 100644
+--- a/taglib/toolkit/tfilestream.cpp
++++ b/taglib/toolkit/tfilestream.cpp
+@@ -52,9 +52,22 @@ namespace
+     const DWORD access = readOnly ? GENERIC_READ : (GENERIC_READ | GENERIC_WRITE);
+ 
+     if(!path.wstr().empty())
++#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
++    {
++      CREATEFILE2_EXTENDED_PARAMETERS createExParams;
++      createExParams.dwSize = sizeof(createExParams);
++      createExParams.dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
++      createExParams.dwFileFlags = 0;
++      createExParams.dwSecurityQosFlags = 0;
++      createExParams.lpSecurityAttributes = NULL;
++      createExParams.hTemplateFile = NULL;
++      return CreateFile2(path.wstr().c_str(), access, FILE_SHARE_READ, OPEN_EXISTING, &createExParams);
++    }
++#else // WINAPI_PARTITION_DESKTOP
+       return CreateFileW(path.wstr().c_str(), access, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
+     else if(!path.str().empty())
+       return CreateFileA(path.str().c_str(), access, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
++#endif // WINAPI_PARTITION_DESKTOP
+     else
+       return InvalidFileHandle;
+   }
+-- 
+2.26.0.windows.1
+
diff --git a/contrib/src/taglib/rules.mak b/contrib/src/taglib/rules.mak
index ba7db32c5e..2844ed4d5d 100644
--- a/contrib/src/taglib/rules.mak
+++ b/contrib/src/taglib/rules.mak
@@ -15,9 +15,8 @@ $(TARBALLS)/taglib-$(TAGLIB_VERSION).tar.gz:
 
 taglib: taglib-$(TAGLIB_VERSION).tar.gz .sum-taglib
 	$(UNPACK)
-ifdef HAVE_WINSTORE
-	$(APPLY) $(SRC)/taglib/unicode.patch
-endif
+	$(APPLY) $(SRC)/taglib/0002-use-GetFileInformationByHandleEx-on-newer-builds-of-.patch
+	$(APPLY) $(SRC)/taglib/0003-don-t-use-CreateFile-in-UWP-builds.patch
 	$(APPLY) $(SRC)/taglib/use_resolvers_on_streams.patch
 	$(MOVE)
 
diff --git a/contrib/src/taglib/unicode.patch b/contrib/src/taglib/unicode.patch
deleted file mode 100644
index 954ad64045..0000000000
--- a/contrib/src/taglib/unicode.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- taglib/taglib/toolkit/tfilestream.cpp.orig	2016-04-07 15:14:47.251819871 +0200
-+++ taglib/taglib/toolkit/tfilestream.cpp	2016-04-07 15:15:05.491812493 +0200
-@@ -53,8 +53,10 @@
- 
-     if(!path.wstr().empty())
-       return CreateFileW(path.wstr().c_str(), access, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
-+#ifndef UNICODE
-     else if(!path.str().empty())
-       return CreateFileA(path.str().c_str(), access, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
-+#endif
-     else
-       return InvalidFileHandle;
-   }



More information about the vlc-commits mailing list