diff options
| author | Aybe <aybe@users.noreply.github.com> | 2017-11-17 02:10:21 +0100 |
|---|---|---|
| committer | Aybe <aybe@users.noreply.github.com> | 2017-11-17 02:10:21 +0100 |
| commit | 295bb9f45429900d019562e487272a5acde59f16 (patch) | |
| tree | 30d1e427084f781cd5578ef69c6df06124825686 | |
| parent | de7382ce8945fae70d947590262c2e0b9ce4a6bf (diff) | |
| download | vcpkg-295bb9f45429900d019562e487272a5acde59f16.tar.gz vcpkg-295bb9f45429900d019562e487272a5acde59f16.zip | |
[libsndfile] patches for UWP builds
| -rw-r--r-- | ports/libsndfile/CONTROL | 2 | ||||
| -rw-r--r-- | ports/libsndfile/portfile.cmake | 9 | ||||
| -rw-r--r-- | ports/libsndfile/uwp-createfile.patch | 39 | ||||
| -rw-r--r-- | ports/libsndfile/uwp-getfilesize.patch | 29 |
4 files changed, 78 insertions, 1 deletions
diff --git a/ports/libsndfile/CONTROL b/ports/libsndfile/CONTROL index 67e058991..70be2ab6c 100644 --- a/ports/libsndfile/CONTROL +++ b/ports/libsndfile/CONTROL @@ -1,4 +1,4 @@ Source: libsndfile -Version: 1.0.29-6830c42-1 +Version: 1.0.29-6830c42-2 Description: Library to read, write and manipulate many soundfile types. Authored by Eric de Castro Lopo Build-Depends: libogg, libflac, libvorbis diff --git a/ports/libsndfile/portfile.cmake b/ports/libsndfile/portfile.cmake index ac07f96a0..304bc005b 100644 --- a/ports/libsndfile/portfile.cmake +++ b/ports/libsndfile/portfile.cmake @@ -19,6 +19,15 @@ vcpkg_download_distfile(ARCHIVE ) vcpkg_extract_source_archive(${ARCHIVE}) +if (VCPKG_CMAKE_SYSTEM_NAME STREQUAL WindowsStore) + vcpkg_apply_patches( + SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/libsndfile-6830c421899e32f8d413a903a21a9b6cf384d369 + PATCHES + "${CMAKE_CURRENT_LIST_DIR}/uwp-createfile.patch" + "${CMAKE_CURRENT_LIST_DIR}/uwp-getfilesize.patch" + ) +endif() + if (VCPKG_CRT_LINKAGE STREQUAL "dynamic") set(CRT_LIB_STATIC 0) elseif (VCPKG_CRT_LINKAGE STREQUAL "static") diff --git a/ports/libsndfile/uwp-createfile.patch b/ports/libsndfile/uwp-createfile.patch new file mode 100644 index 000000000..d4b58a74f --- /dev/null +++ b/ports/libsndfile/uwp-createfile.patch @@ -0,0 +1,39 @@ +diff --git a/src/file_io.c b/src/file_io.c +index 7cf8f0c..a47ce6b 100644 +--- a/src/file_io.c ++++ b/src/file_io.c +@@ -787,26 +787,14 @@ psf_open_handle (PSF_FILE * pfile) + return NULL ; + } ; + +- if (pfile->use_wchar) +- handle = CreateFileW ( +- pfile->path.wc, /* pointer to name of the file */ +- dwDesiredAccess, /* access (read-write) mode */ +- dwShareMode, /* share mode */ +- 0, /* pointer to security attributes */ +- dwCreationDistribution, /* how to create */ +- FILE_ATTRIBUTE_NORMAL, /* file attributes (could use FILE_FLAG_SEQUENTIAL_SCAN) */ +- NULL /* handle to file with attributes to copy */ +- ) ; +- else +- handle = CreateFile ( +- pfile->path.c, /* pointer to name of the file */ +- dwDesiredAccess, /* access (read-write) mode */ +- dwShareMode, /* share mode */ +- 0, /* pointer to security attributes */ +- dwCreationDistribution, /* how to create */ +- FILE_ATTRIBUTE_NORMAL, /* file attributes (could use FILE_FLAG_SEQUENTIAL_SCAN) */ +- NULL /* handle to file with attributes to copy */ +- ) ; ++ if (!pfile->use_wchar) ++ return NULL; ++ ++ CREATEFILE2_EXTENDED_PARAMETERS cfParams = {0}; ++ cfParams.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS); ++ cfParams.dwFileAttributes = FILE_ATTRIBUTE_NORMAL; ++ ++ handle = CreateFile2(pfile->path.wc, dwDesiredAccess, dwShareMode, dwCreationDistribution, &cfParams); + + if (handle == INVALID_HANDLE_VALUE) + return NULL ; diff --git a/ports/libsndfile/uwp-getfilesize.patch b/ports/libsndfile/uwp-getfilesize.patch new file mode 100644 index 000000000..1ecbcda7f --- /dev/null +++ b/ports/libsndfile/uwp-getfilesize.patch @@ -0,0 +1,29 @@ +diff --git a/src/file_io.c b/src/file_io.c +index a47ce6b..4b38455 100644 +--- a/src/file_io.c ++++ b/src/file_io.c +@@ -1093,19 +1093,16 @@ psf_is_pipe (SF_PRIVATE *psf) + /* USE_WINDOWS_API */ sf_count_t + psf_get_filelen_handle (HANDLE handle) + { sf_count_t filelen ; +- DWORD dwFileSizeLow, dwFileSizeHigh, dwError = NO_ERROR ; ++ DWORD dwError = NO_ERROR ; ++ LARGE_INTEGER size; + +- dwFileSizeLow = GetFileSize (handle, &dwFileSizeHigh) ; +- +- if (dwFileSizeLow == 0xFFFFFFFF) +- dwError = GetLastError () ; ++ if (!GetFileSizeEx(handle, &size)) ++ dwError = GetLastError(); + + if (dwError != NO_ERROR) + return (sf_count_t) -1 ; + +- filelen = dwFileSizeLow + ((__int64) dwFileSizeHigh << 32) ; +- +- return filelen ; ++ return size.QuadPart; + } /* psf_get_filelen_handle */ + + /* USE_WINDOWS_API */ void |
