Annotation of sbbs/src/xpdev/xpsem.h, revision 1.1.1.1

1.1       root        1: #ifndef _XPSEM_H_
                      2: #define _XPSEM_H_
                      3: 
                      4: /*
                      5:  * $Id: xpsem.h,v 1.9 2005/09/12 23:24:38 deuce Exp $
                      6:  *
                      7:  * semaphore.h: POSIX 1003.1b semaphores
                      8: */
                      9: 
                     10: /*-
                     11:  * Copyright (c) 1996, 1997
                     12:  *     HD Associates, Inc.  All rights reserved.
                     13:  *
                     14:  * Redistribution and use in source and binary forms, with or without
                     15:  * modification, are permitted provided that the following conditions
                     16:  * are met:
                     17:  * 1. Redistributions of source code must retain the above copyright
                     18:  *    notice, this list of conditions and the following disclaimer.
                     19:  * 2. Redistributions in binary form must reproduce the above copyright
                     20:  *    notice, this list of conditions and the following disclaimer in the
                     21:  *    documentation and/or other materials provided with the distribution.
                     22:  * 3. All advertising materials mentioning features or use of this software
                     23:  *    must display the following acknowledgement:
                     24:  *     This product includes software developed by HD Associates, Inc
                     25:  * 4. Neither the name of the author nor the names of any co-contributors
                     26:  *    may be used to endorse or promote products derived from this software
                     27:  *    without specific prior written permission.
                     28:  *
                     29:  * THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
                     30:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     31:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     32:  * ARE DISCLAIMED.  IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
                     33:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     34:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     35:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     36:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     37:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     38:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     39:  * SUCH DAMAGE.
                     40:  *
                     41:  * $FreeBSD: src/sys/posix4/semaphore.h,v 1.6 2000/01/20 07:55:42 jasone Exp $
                     42:  */
                     43: 
                     44: #include <limits.h>
                     45: 
                     46: #include <sys/types.h>
                     47: #include <fcntl.h>
                     48: #include <pthread.h>
                     49: 
                     50: /* Opaque type definition. */
                     51: struct xp_sem;
                     52: typedef struct xp_sem *xp_sem_t;
                     53: 
                     54: #define XP_SEM_FAILED  ((xp_sem_t *)0)
                     55: #define XP_SEM_VALUE_MAX       UINT_MAX
                     56: 
                     57: #if defined(__solaris__)
                     58: typedef unsigned int   u_int32_t;
                     59: #endif
                     60: 
                     61: #if defined(__cplusplus)
                     62: extern "C" {
                     63: #endif
                     64: int     xp_sem_init (xp_sem_t *, int, unsigned int);
                     65: int     xp_sem_destroy (xp_sem_t *);
                     66: xp_sem_t       *xp_sem_open (const char *, int, ...);
                     67: int     xp_sem_close (xp_sem_t *);
                     68: int     xp_sem_unlink (const char *);
                     69: int     xp_sem_wait (xp_sem_t *);
                     70: int     xp_sem_trywait (xp_sem_t *);
                     71: int     xp_sem_post (xp_sem_t *);
                     72: int     xp_sem_getvalue (xp_sem_t *, int *);
                     73: int     xp_sem_setvalue (xp_sem_t *, int);
                     74: int  xp_sem_timedwait (xp_sem_t *sem, const struct timespec *abs_timeout);
                     75: #if defined(__cplusplus)
                     76: }
                     77: #endif
                     78: 
                     79: /*
                     80: * $Id: xpsem.h,v 1.9 2005/09/12 23:24:38 deuce Exp $
                     81: */
                     82: 
                     83: /* Begin thread_private.h kluge */
                     84: /*
                     85:  * These come out of (or should go into) thread_private.h - rather than have 
                     86:  * to copy (or symlink) the files from the source tree these definitions are 
                     87:  * inlined here.  Obviously these go away when this module is part of libc.
                     88: */
                     89: 
                     90: struct xp_sem {
                     91: #define XP_SEM_MAGIC       ((u_int32_t) 0x09fa4012)
                     92:         u_int32_t       magic;
                     93:         pthread_mutex_t lock;
                     94:         pthread_cond_t  gtzero;
                     95:         u_int32_t       count;
                     96:         u_int32_t       nwaiters;
                     97: };
                     98: 
                     99: extern pthread_once_t _thread_init_once;
                    100: extern int _threads_initialized;
                    101: extern void  _thread_init (void);
                    102: #define THREAD_INIT() \
                    103:        (void) pthread_once(&_thread_init_once, _thread_init)
                    104: #define THREAD_SAFE() \
                    105:        (_threads_initialized != 0)
                    106: 
                    107: #define _SEM_CHECK_VALIDITY(sem)               \
                    108:        if (sem==NULL || (*(sem))->magic != XP_SEM_MAGIC) {     \
                    109:                errno = EINVAL;                 \
                    110:                retval = -1;                    \
                    111:                goto RETURN;                    \
                    112:        }
                    113: 
                    114: struct pthread_rwlockattr {
                    115:         int             pshared;
                    116:        };
                    117: 
                    118: /* End thread_private.h kluge */
                    119: 
                    120: #endif /* _XPSEM_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.