commit d41695f8bd5fa6fb2f9f61c56785e753abb6be03
Author: Nicolas Chauvet <kwizart(a)gmail.com>
Date: Sat Jul 18 19:12:11 2020 +0200
Add gcrypt downgrade patch
...port-for-thread-callbacks-for-older-gcryp.patch | 94 ++++++++++++++++++++++
1 file changed, 94 insertions(+)
---
diff --git a/Restore-support-for-thread-callbacks-for-older-gcryp.patch
b/Restore-support-for-thread-callbacks-for-older-gcryp.patch
new file mode 100644
index 0000000..819f0d0
--- /dev/null
+++ b/Restore-support-for-thread-callbacks-for-older-gcryp.patch
@@ -0,0 +1,94 @@
+From 43332a4fa12ff79f284749177dc0743a495caea6 Mon Sep 17 00:00:00 2001
+From: Nicolas Chauvet <kwizart(a)gmail.com>
+Date: Sat, 18 Jul 2020 15:19:31 +0200
+Subject: [PATCH 1/1] Restore support for thread callbacks for older gcrypt
+
+---
+ include/vlc_gcrypt.h | 64 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 64 insertions(+)
+
+diff --git a/include/vlc_gcrypt.h b/include/vlc_gcrypt.h
+index a04e1b1d86..4c7f1e86b0 100644
+--- a/include/vlc_gcrypt.h
++++ b/include/vlc_gcrypt.h
+@@ -25,6 +25,67 @@
+
+ #include <errno.h>
+
++#if GCRYPT_VERSION_NUMBER < 0x010600
++#ifdef LIBVLC_USE_PTHREAD
++/**
++ * If possible, use gcrypt-provided thread implementation. This is so that
++ * other non-VLC components (inside the process) can also use gcrypt safely.
++ */
++GCRY_THREAD_OPTION_PTHREAD_IMPL;
++# define gcry_threads_vlc gcry_threads_pthread
++#else
++
++/**
++ * gcrypt thread option VLC implementation
++ */
++
++static int gcry_vlc_mutex_init( void **p_sys )
++{
++ vlc_mutex_t *p_lock = (vlc_mutex_t *)malloc( sizeof( vlc_mutex_t ) );
++ if( p_lock == NULL)
++ return ENOMEM;
++
++ vlc_mutex_init( p_lock );
++ *p_sys = p_lock;
++ return VLC_SUCCESS;
++}
++
++static int gcry_vlc_mutex_destroy( void **p_sys )
++{
++ vlc_mutex_t *p_lock = (vlc_mutex_t *)*p_sys;
++ vlc_mutex_destroy( p_lock );
++ free( p_lock );
++ return VLC_SUCCESS;
++}
++
++static int gcry_vlc_mutex_lock( void **p_sys )
++{
++ vlc_mutex_lock( (vlc_mutex_t *)*p_sys );
++ return VLC_SUCCESS;
++}
++
++static int gcry_vlc_mutex_unlock( void **lock )
++{
++ vlc_mutex_unlock( (vlc_mutex_t *)*lock );
++ return VLC_SUCCESS;
++}
++
++static const struct gcry_thread_cbs gcry_threads_vlc =
++{
++ GCRY_THREAD_OPTION_USER,
++ NULL,
++ gcry_vlc_mutex_init,
++ gcry_vlc_mutex_destroy,
++ gcry_vlc_mutex_lock,
++ gcry_vlc_mutex_unlock,
++ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
++};
++#endif
++#endif
++
++/**
++ * Initializes gcrypt with proper locking.
++ */
+ static inline void vlc_gcrypt_init (void)
+ {
+ /* This would need a process-wide static mutex with all libraries linking
+@@ -37,6 +98,9 @@ static inline void vlc_gcrypt_init (void)
+ vlc_global_lock (VLC_GCRYPT_MUTEX);
+ if (!done)
+ {
++#if GCRYPT_VERSION_NUMBER < 0x010600
++ gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_vlc);
++#endif
+ /* The suggested way for an application to make sure that global_init
+ * has been called is by using gcry_check_version. (see global_init
+ * comments in gcrypt sources) */
+--
+2.25.4
+