diff options
Diffstat (limited to 'gpgme/mutex.h')
| -rw-r--r-- | gpgme/mutex.h | 124 | 
1 files changed, 0 insertions, 124 deletions
| diff --git a/gpgme/mutex.h b/gpgme/mutex.h deleted file mode 100644 index a1cf868b..00000000 --- a/gpgme/mutex.h +++ /dev/null @@ -1,124 +0,0 @@ -/* mutex.h -  Portable mutual exclusion, independent from any thread library. - *      Copyright (C) 2002 g10 Code GmbH - * - * This file is part of GPGME. - * - * GPGME 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 of the License, or - * (at your option) any later version. - * - * GPGME 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 this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ - -#ifndef MUTEX_H -#define MUTEX_H - -/* Define MUTEX_FAKE before including the file to get stubs that don't -   provide any locking at all.  Define MUTEX_PTHREAD if you can link -   against the posix thread library.  */ - -#if defined(MUTEX_FAKE) - -typedef char mutex_t; -#define mutex_init(x) (0) -#define mutex_destroy(x) -#define mutex_lock(x) (0) -#define mutex_unlock(x) (0) - -#elif defined(MUTEX_PTHREAD) - -#include <pthread.h> - -#define mutex_t pthread_mutex_t -#define mutex_init(x) pthread_mutex_init (&(x), 0) -#define mutex_destroy(x) pthread_mutex_destroy(&(x)) -#define mutex_lock(x) pthread_mutex_lock (&(x)) -#define mutex_unlock(x) pthread_mutex_unlock (&(x)) - -#else - -#include <errno.h> -#include <fcntl.h> -#include <unistd.h> - -/* The type of a mutex.  */ -typedef int mutex_t[2]; - -inline static int -set_close_on_exec (int fd) -{ -  int flags = fcntl (fd, F_GETFD, 0); -  if (flags == -1) -    return errno; -  flags |= FD_CLOEXEC; -  if (fcntl (fd, F_SETFD, flags) == -1) -    return errno; -  return 0; -} - -/* Initialize the mutex variable MUTEX.  */ -inline int -mutex_init (mutex_t mutex) -{ -  ssize_t amount; -  int err = 0; - -  if (pipe (mutex)) -    return errno; - -  err = set_close_on_exec (mutex[0]); -  if (!err) -    err = set_close_on_exec (mutex[1]); -  if (!err) -    while ((amount = write (mutex[1], " ", 1)) < 0 && errno == EINTR) -      ; -  if (!err && amount != 1) -    err = errno; - -  if (err) -    { -      close (mutex[0]); -      close (mutex[1]); -    } -  return err; -} - -/* Destroy the mutex variable MUTEX.  */ -inline void -mutex_destroy (mutex_t mutex) -{ -  close (mutex[0]); -  close (mutex[1]); -} - -/* Take the mutex variable MUTEX.  */ -inline int -mutex_lock (mutex_t mutex) -{ -  char data; -  int amount; -  while ((amount = read (mutex[0], &data, 1)) < 0 && errno == EINTR) -    ; -  return (amount != 1) ? errno : 0; -} - -/* Release the mutex variable MUTEX.  */ -inline int -mutex_unlock (mutex_t mutex) -{ -  int amount; -  while ((amount = write (mutex[1], " ", 1)) < 0 && errno == EINTR) -    ; -  return (amount != 1) ? errno : 0; -} - -#endif	/* MUTEX_FAKE */ -#endif	/* MUTEX_H */ | 
