⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 locking_gcrypt.c

📁 GNUnet是一个安全的点对点网络框架
💻 C
字号:
/*     This file is part of GNUnet.     (C) 2001, 2002, 2003, 2004, 2006, 2007 Christian Grothoff (and other contributing authors)     GNUnet is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published     by the Free Software Foundation; either version 2, or (at your     option) any later version.     GNUnet is distributed in the hope that it will be useful, but     WITHOUT ANY WARRANTY; without even the implied warranty of     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     General Public License for more details.     You should have received a copy of the GNU General Public License     along with GNUnet; see the file COPYING.  If not, write to the     Free Software Foundation, Inc., 59 Temple Place - Suite 330,     Boston, MA 02111-1307, USA.*//** * @file util/crypto/locking_gcrypt.c * @brief locking for gcrypt * @author Christian Grothoff */#include "platform.h"#include "gnunet_util.h"#include "locking_gcrypt.h"#include <gcrypt.h>/** * Should we use a lock to avoid concurrent accesses * to gcrypt or should we tell gcrypt that we use * pthreads? */#define USE_LOCK GNUNET_NO#if USE_LOCKstatic struct GNUNET_Mutex *gcrypt_shared_lock;#elseGCRY_THREAD_OPTION_PTHREAD_IMPL;#endifvoidGNUNET_lock_gcrypt_ (){#if USE_LOCK  GNUNET_mutex_lock (gcrypt_shared_lock);#endif}voidGNUNET_unlock_gcrypt_ (){#if USE_LOCK  GNUNET_mutex_unlock (gcrypt_shared_lock);#endif}static voiddummy_logger (void *arg, int level, const char *format, va_list args){  /* do nothing -- ignore libgcyrpt errors */}void __attribute__ ((constructor)) GNUNET_crypto_ltdl_init (){#if USE_LOCK  gcrypt_shared_lock = GNUNET_mutex_create (GNUNET_YES);#else  gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);#endif  gcry_control (GCRYCTL_DISABLE_SECMEM, 0);  if (!gcry_check_version (GCRYPT_VERSION))    {      fprintf (stderr,               _               ("libgcrypt has not the expected version (version %s is required).\n"),               GCRYPT_VERSION);      abort ();    }  srand ((unsigned int) time (NULL));  gcry_set_log_handler (&dummy_logger, NULL);#ifdef gcry_fast_random_poll  GNUNET_lock_gcrypt_ ();  gcry_fast_random_poll ();  GNUNET_unlock_gcrypt_ ();#endif}/** * This function should only be called in testcases * where strong entropy gathering is not desired * (for example, for hostkey generation). */voidGNUNET_disable_entropy_gathering (){  gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);}void __attribute__ ((destructor)) GNUNET_crypto_ltdl_fini (){#if USE_LOCK  GNUNET_mutex_destroy (gcrypt_shared_lock);  gcrypt_shared_lock = NULL;#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -