From d41695f8bd5fa6fb2f9f61c56785e753abb6be03 Mon Sep 17 00:00:00 2001 From: Nicolas Chauvet Date: Sat, 18 Jul 2020 19:12:11 +0200 Subject: [PATCH] Add gcrypt downgrade patch --- ...for-thread-callbacks-for-older-gcryp.patch | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 Restore-support-for-thread-callbacks-for-older-gcryp.patch 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 +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 + ++#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 +