1*71b3fa15SDavid Xu /*- 2*71b3fa15SDavid Xu * Copyright (c) 1998 Alex Nash 3*71b3fa15SDavid Xu * All rights reserved. 4*71b3fa15SDavid Xu * 5*71b3fa15SDavid Xu * Redistribution and use in source and binary forms, with or without 6*71b3fa15SDavid Xu * modification, are permitted provided that the following conditions 7*71b3fa15SDavid Xu * are met: 8*71b3fa15SDavid Xu * 1. Redistributions of source code must retain the above copyright 9*71b3fa15SDavid Xu * notice, this list of conditions and the following disclaimer. 10*71b3fa15SDavid Xu * 2. Redistributions in binary form must reproduce the above copyright 11*71b3fa15SDavid Xu * notice, this list of conditions and the following disclaimer in the 12*71b3fa15SDavid Xu * documentation and/or other materials provided with the distribution. 13*71b3fa15SDavid Xu * 14*71b3fa15SDavid Xu * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*71b3fa15SDavid Xu * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*71b3fa15SDavid Xu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*71b3fa15SDavid Xu * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*71b3fa15SDavid Xu * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*71b3fa15SDavid Xu * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*71b3fa15SDavid Xu * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*71b3fa15SDavid Xu * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*71b3fa15SDavid Xu * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*71b3fa15SDavid Xu * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*71b3fa15SDavid Xu * SUCH DAMAGE. 25*71b3fa15SDavid Xu * 26*71b3fa15SDavid Xu * $FreeBSD: src/lib/libpthread/thread/thr_rwlockattr.c,v 1.8 2002/09/16 08:45:35 mini Exp $ 27*71b3fa15SDavid Xu * $DragonFly: src/lib/libthread_xu/thread/thr_rwlockattr.c,v 1.1 2005/02/01 12:38:27 davidxu Exp $ 28*71b3fa15SDavid Xu */ 29*71b3fa15SDavid Xu 30*71b3fa15SDavid Xu #include <errno.h> 31*71b3fa15SDavid Xu #include <stdlib.h> 32*71b3fa15SDavid Xu 33*71b3fa15SDavid Xu #include <pthread.h> 34*71b3fa15SDavid Xu #include "thr_private.h" 35*71b3fa15SDavid Xu 36*71b3fa15SDavid Xu __weak_reference(_pthread_rwlockattr_destroy, pthread_rwlockattr_destroy); 37*71b3fa15SDavid Xu __weak_reference(_pthread_rwlockattr_getpshared, pthread_rwlockattr_getpshared); 38*71b3fa15SDavid Xu __weak_reference(_pthread_rwlockattr_init, pthread_rwlockattr_init); 39*71b3fa15SDavid Xu __weak_reference(_pthread_rwlockattr_setpshared, pthread_rwlockattr_setpshared); 40*71b3fa15SDavid Xu 41*71b3fa15SDavid Xu int 42*71b3fa15SDavid Xu _pthread_rwlockattr_destroy(pthread_rwlockattr_t *rwlockattr) 43*71b3fa15SDavid Xu { 44*71b3fa15SDavid Xu pthread_rwlockattr_t prwlockattr; 45*71b3fa15SDavid Xu 46*71b3fa15SDavid Xu if (rwlockattr == NULL) 47*71b3fa15SDavid Xu return(EINVAL); 48*71b3fa15SDavid Xu 49*71b3fa15SDavid Xu prwlockattr = *rwlockattr; 50*71b3fa15SDavid Xu 51*71b3fa15SDavid Xu if (prwlockattr == NULL) 52*71b3fa15SDavid Xu return(EINVAL); 53*71b3fa15SDavid Xu 54*71b3fa15SDavid Xu free(prwlockattr); 55*71b3fa15SDavid Xu 56*71b3fa15SDavid Xu return(0); 57*71b3fa15SDavid Xu } 58*71b3fa15SDavid Xu 59*71b3fa15SDavid Xu int 60*71b3fa15SDavid Xu _pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *rwlockattr, 61*71b3fa15SDavid Xu int *pshared) 62*71b3fa15SDavid Xu { 63*71b3fa15SDavid Xu *pshared = (*rwlockattr)->pshared; 64*71b3fa15SDavid Xu 65*71b3fa15SDavid Xu return(0); 66*71b3fa15SDavid Xu } 67*71b3fa15SDavid Xu 68*71b3fa15SDavid Xu int 69*71b3fa15SDavid Xu _pthread_rwlockattr_init(pthread_rwlockattr_t *rwlockattr) 70*71b3fa15SDavid Xu { 71*71b3fa15SDavid Xu pthread_rwlockattr_t prwlockattr; 72*71b3fa15SDavid Xu 73*71b3fa15SDavid Xu if (rwlockattr == NULL) 74*71b3fa15SDavid Xu return(EINVAL); 75*71b3fa15SDavid Xu 76*71b3fa15SDavid Xu prwlockattr = (pthread_rwlockattr_t) 77*71b3fa15SDavid Xu malloc(sizeof(struct pthread_rwlockattr)); 78*71b3fa15SDavid Xu 79*71b3fa15SDavid Xu if (prwlockattr == NULL) 80*71b3fa15SDavid Xu return(ENOMEM); 81*71b3fa15SDavid Xu 82*71b3fa15SDavid Xu prwlockattr->pshared = PTHREAD_PROCESS_PRIVATE; 83*71b3fa15SDavid Xu *rwlockattr = prwlockattr; 84*71b3fa15SDavid Xu 85*71b3fa15SDavid Xu return(0); 86*71b3fa15SDavid Xu } 87*71b3fa15SDavid Xu 88*71b3fa15SDavid Xu int 89*71b3fa15SDavid Xu _pthread_rwlockattr_setpshared(pthread_rwlockattr_t *rwlockattr, int pshared) 90*71b3fa15SDavid Xu { 91*71b3fa15SDavid Xu /* Only PTHREAD_PROCESS_PRIVATE is supported. */ 92*71b3fa15SDavid Xu if (pshared != PTHREAD_PROCESS_PRIVATE) 93*71b3fa15SDavid Xu return(EINVAL); 94*71b3fa15SDavid Xu 95*71b3fa15SDavid Xu (*rwlockattr)->pshared = pshared; 96*71b3fa15SDavid Xu 97*71b3fa15SDavid Xu return(0); 98*71b3fa15SDavid Xu } 99*71b3fa15SDavid Xu 100