171b3fa15SDavid Xu /*- 271b3fa15SDavid Xu * Copyright (c) 1998 Alex Nash 371b3fa15SDavid Xu * All rights reserved. 471b3fa15SDavid Xu * 571b3fa15SDavid Xu * Redistribution and use in source and binary forms, with or without 671b3fa15SDavid Xu * modification, are permitted provided that the following conditions 771b3fa15SDavid Xu * are met: 871b3fa15SDavid Xu * 1. Redistributions of source code must retain the above copyright 971b3fa15SDavid Xu * notice, this list of conditions and the following disclaimer. 1071b3fa15SDavid Xu * 2. Redistributions in binary form must reproduce the above copyright 1171b3fa15SDavid Xu * notice, this list of conditions and the following disclaimer in the 1271b3fa15SDavid Xu * documentation and/or other materials provided with the distribution. 1371b3fa15SDavid Xu * 1471b3fa15SDavid Xu * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1571b3fa15SDavid Xu * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1671b3fa15SDavid Xu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1771b3fa15SDavid Xu * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1871b3fa15SDavid Xu * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1971b3fa15SDavid Xu * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2071b3fa15SDavid Xu * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2171b3fa15SDavid Xu * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2271b3fa15SDavid Xu * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2371b3fa15SDavid Xu * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2471b3fa15SDavid Xu * SUCH DAMAGE. 2571b3fa15SDavid Xu * 2671b3fa15SDavid Xu * $FreeBSD: src/lib/libpthread/thread/thr_rwlockattr.c,v 1.8 2002/09/16 08:45:35 mini Exp $ 27*5a1048c8SDavid Xu * $DragonFly: src/lib/libthread_xu/thread/thr_rwlockattr.c,v 1.2 2006/04/05 00:24:36 davidxu Exp $ 2871b3fa15SDavid Xu */ 2971b3fa15SDavid Xu 3071b3fa15SDavid Xu #include <errno.h> 3171b3fa15SDavid Xu #include <stdlib.h> 3271b3fa15SDavid Xu 3371b3fa15SDavid Xu #include <pthread.h> 3471b3fa15SDavid Xu #include "thr_private.h" 3571b3fa15SDavid Xu 3671b3fa15SDavid Xu int 3771b3fa15SDavid Xu _pthread_rwlockattr_destroy(pthread_rwlockattr_t *rwlockattr) 3871b3fa15SDavid Xu { 3971b3fa15SDavid Xu pthread_rwlockattr_t prwlockattr; 4071b3fa15SDavid Xu 4171b3fa15SDavid Xu if (rwlockattr == NULL) 4271b3fa15SDavid Xu return(EINVAL); 4371b3fa15SDavid Xu 4471b3fa15SDavid Xu prwlockattr = *rwlockattr; 4571b3fa15SDavid Xu 4671b3fa15SDavid Xu if (prwlockattr == NULL) 4771b3fa15SDavid Xu return(EINVAL); 4871b3fa15SDavid Xu 4971b3fa15SDavid Xu free(prwlockattr); 5071b3fa15SDavid Xu 5171b3fa15SDavid Xu return(0); 5271b3fa15SDavid Xu } 5371b3fa15SDavid Xu 5471b3fa15SDavid Xu int 5571b3fa15SDavid Xu _pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *rwlockattr, 5671b3fa15SDavid Xu int *pshared) 5771b3fa15SDavid Xu { 5871b3fa15SDavid Xu *pshared = (*rwlockattr)->pshared; 5971b3fa15SDavid Xu 6071b3fa15SDavid Xu return(0); 6171b3fa15SDavid Xu } 6271b3fa15SDavid Xu 6371b3fa15SDavid Xu int 6471b3fa15SDavid Xu _pthread_rwlockattr_init(pthread_rwlockattr_t *rwlockattr) 6571b3fa15SDavid Xu { 6671b3fa15SDavid Xu pthread_rwlockattr_t prwlockattr; 6771b3fa15SDavid Xu 6871b3fa15SDavid Xu if (rwlockattr == NULL) 6971b3fa15SDavid Xu return(EINVAL); 7071b3fa15SDavid Xu 7171b3fa15SDavid Xu prwlockattr = (pthread_rwlockattr_t) 7271b3fa15SDavid Xu malloc(sizeof(struct pthread_rwlockattr)); 7371b3fa15SDavid Xu 7471b3fa15SDavid Xu if (prwlockattr == NULL) 7571b3fa15SDavid Xu return(ENOMEM); 7671b3fa15SDavid Xu 7771b3fa15SDavid Xu prwlockattr->pshared = PTHREAD_PROCESS_PRIVATE; 7871b3fa15SDavid Xu *rwlockattr = prwlockattr; 7971b3fa15SDavid Xu 8071b3fa15SDavid Xu return(0); 8171b3fa15SDavid Xu } 8271b3fa15SDavid Xu 8371b3fa15SDavid Xu int 8471b3fa15SDavid Xu _pthread_rwlockattr_setpshared(pthread_rwlockattr_t *rwlockattr, int pshared) 8571b3fa15SDavid Xu { 8671b3fa15SDavid Xu /* Only PTHREAD_PROCESS_PRIVATE is supported. */ 8771b3fa15SDavid Xu if (pshared != PTHREAD_PROCESS_PRIVATE) 8871b3fa15SDavid Xu return(EINVAL); 8971b3fa15SDavid Xu 9071b3fa15SDavid Xu (*rwlockattr)->pshared = pshared; 9171b3fa15SDavid Xu 9271b3fa15SDavid Xu return(0); 9371b3fa15SDavid Xu } 9471b3fa15SDavid Xu 95*5a1048c8SDavid Xu __strong_reference(_pthread_rwlockattr_destroy, pthread_rwlockattr_destroy); 96*5a1048c8SDavid Xu __strong_reference(_pthread_rwlockattr_getpshared, pthread_rwlockattr_getpshared); 97*5a1048c8SDavid Xu __strong_reference(_pthread_rwlockattr_init, pthread_rwlockattr_init); 98*5a1048c8SDavid Xu __strong_reference(_pthread_rwlockattr_setpshared, pthread_rwlockattr_setpshared); 99*5a1048c8SDavid Xu 100