vlc | branch: master | Hugo Beauzée-Luyssen <[email protected]> | Wed May 11 21:38:35 2016 +0200| [ccd2051ff9608d0e7387a72b1bace857a6f6c01a] | committer: Hugo Beauzée-Luyssen
contribs: gnutls: Use _topendir instead of opendir on winrt > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ccd2051ff9608d0e7387a72b1bace857a6f6c01a --- contrib/src/gnutls/rules.mak | 1 + contrib/src/gnutls/winrt-topendir.patch | 93 +++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) diff --git a/contrib/src/gnutls/rules.mak b/contrib/src/gnutls/rules.mak index d9b5bc4..f6c3352 100644 --- a/contrib/src/gnutls/rules.mak +++ b/contrib/src/gnutls/rules.mak @@ -24,6 +24,7 @@ ifdef HAVE_WIN32 $(APPLY) $(SRC)/gnutls/gnutls-mingw64.patch ifdef HAVE_WINRT $(APPLY) $(SRC)/gnutls/gnutls-winrt.patch + $(APPLY) $(SRC)/gnutls/winrt-topendir.patch endif endif ifdef HAVE_ANDROID diff --git a/contrib/src/gnutls/winrt-topendir.patch b/contrib/src/gnutls/winrt-topendir.patch new file mode 100644 index 0000000..cd09c7e --- /dev/null +++ b/contrib/src/gnutls/winrt-topendir.patch @@ -0,0 +1,93 @@ +--- gnutls/lib/x509/verify-high2.c.orig 2016-05-11 21:28:25.584504325 +0200 ++++ gnutls/lib/x509/verify-high2.c 2016-05-11 21:32:00.596348074 +0200 +@@ -37,6 +37,10 @@ + + #include <dirent.h> + ++#include <windows.h> ++#include <tchar.h> ++ ++ + #ifndef _DIRENT_HAVE_D_TYPE + # ifdef DT_UNKNOWN + # define _DIRENT_HAVE_D_TYPE +@@ -366,14 +370,40 @@ + return ret; + } + ++static inline char *FromWide (const wchar_t *wide) ++{ ++ size_t len = WideCharToMultiByte (CP_UTF8, 0, wide, -1, NULL, 0, NULL, NULL); ++ if (len == 0) ++ return NULL; ++ ++ char *out = (char *)malloc (len); ++ ++ if (out) ++ WideCharToMultiByte (CP_UTF8, 0, wide, -1, out, len, NULL, NULL); ++ return out; ++} ++ ++static inline wchar_t *ToWide (const char *utf8) ++{ ++ int len = MultiByteToWideChar (CP_UTF8, 0, utf8, -1, NULL, 0); ++ if (len == 0) ++ return NULL; ++ ++ wchar_t *out = (wchar_t *)malloc (len * sizeof (wchar_t)); ++ ++ if (out) ++ MultiByteToWideChar (CP_UTF8, 0, utf8, -1, out, len); ++ return out; ++} ++ + static + int load_dir_certs(const char *dirname, + gnutls_x509_trust_list_t list, + unsigned int tl_flags, unsigned int tl_vflags, + unsigned type, unsigned crl) + { +- DIR *dirp; +- struct dirent *d; ++ _TDIR *dirp; ++ struct _tdirent *d; + int ret; + int r = 0; + char path[GNUTLS_PATH_MAX]; +@@ -381,11 +411,13 @@ + struct dirent e; + #endif + +- dirp = opendir(dirname); ++ TCHAR* dirnameW = ToWide(dirname); ++ dirp = _topendir(dirnameW); ++ free(dirnameW); + if (dirp != NULL) { + do { + #ifdef _WIN32 +- d = readdir(dirp); ++ d = _treaddir(dirp); + if (d != NULL) { + #else + ret = readdir_r(dirp, &e, &d); +@@ -395,8 +427,10 @@ + #endif + ) { + #endif ++ char* d_name = FromWide(d->d_name); + snprintf(path, sizeof(path), "%s/%s", +- dirname, d->d_name); ++ dirname, d_name); ++ free(d_name); + + if (crl != 0) { + ret = +@@ -414,7 +448,7 @@ + } + } + while (d != NULL); +- closedir(dirp); ++ _tclosedir(dirp); + } + + return r; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
