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*fc71f871SDavid Xu * $DragonFly: src/lib/libthread_xu/thread/thr_rwlockattr.c,v 1.3 2006/04/06 13:03:09 davidxu Exp $ 2871b3fa15SDavid Xu */ 2971b3fa15SDavid Xu 30*fc71f871SDavid Xu #include "namespace.h" 3171b3fa15SDavid Xu #include <errno.h> 3271b3fa15SDavid Xu #include <stdlib.h> 3371b3fa15SDavid Xu 3471b3fa15SDavid Xu #include <pthread.h> 35*fc71f871SDavid Xu #include "un-namespace.h" 36*fc71f871SDavid Xu 3771b3fa15SDavid Xu #include "thr_private.h" 3871b3fa15SDavid Xu 3971b3fa15SDavid Xu int 4071b3fa15SDavid Xu _pthread_rwlockattr_destroy(pthread_rwlockattr_t *rwlockattr) 4171b3fa15SDavid Xu { 4271b3fa15SDavid Xu pthread_rwlockattr_t prwlockattr; 4371b3fa15SDavid Xu 4471b3fa15SDavid Xu if (rwlockattr == NULL) 4571b3fa15SDavid Xu return(EINVAL); 4671b3fa15SDavid Xu 4771b3fa15SDavid Xu prwlockattr = *rwlockattr; 4871b3fa15SDavid Xu 4971b3fa15SDavid Xu if (prwlockattr == NULL) 5071b3fa15SDavid Xu return(EINVAL); 5171b3fa15SDavid Xu 5271b3fa15SDavid Xu free(prwlockattr); 5371b3fa15SDavid Xu 5471b3fa15SDavid Xu return(0); 5571b3fa15SDavid Xu } 5671b3fa15SDavid Xu 5771b3fa15SDavid Xu int 5871b3fa15SDavid Xu _pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *rwlockattr, 5971b3fa15SDavid Xu int *pshared) 6071b3fa15SDavid Xu { 6171b3fa15SDavid Xu *pshared = (*rwlockattr)->pshared; 6271b3fa15SDavid Xu 6371b3fa15SDavid Xu return(0); 6471b3fa15SDavid Xu } 6571b3fa15SDavid Xu 6671b3fa15SDavid Xu int 6771b3fa15SDavid Xu _pthread_rwlockattr_init(pthread_rwlockattr_t *rwlockattr) 6871b3fa15SDavid Xu { 6971b3fa15SDavid Xu pthread_rwlockattr_t prwlockattr; 7071b3fa15SDavid Xu 7171b3fa15SDavid Xu if (rwlockattr == NULL) 7271b3fa15SDavid Xu return(EINVAL); 7371b3fa15SDavid Xu 7471b3fa15SDavid Xu prwlockattr = (pthread_rwlockattr_t) 7571b3fa15SDavid Xu malloc(sizeof(struct pthread_rwlockattr)); 7671b3fa15SDavid Xu 7771b3fa15SDavid Xu if (prwlockattr == NULL) 7871b3fa15SDavid Xu return(ENOMEM); 7971b3fa15SDavid Xu 8071b3fa15SDavid Xu prwlockattr->pshared = PTHREAD_PROCESS_PRIVATE; 8171b3fa15SDavid Xu *rwlockattr = prwlockattr; 8271b3fa15SDavid Xu 8371b3fa15SDavid Xu return(0); 8471b3fa15SDavid Xu } 8571b3fa15SDavid Xu 8671b3fa15SDavid Xu int 8771b3fa15SDavid Xu _pthread_rwlockattr_setpshared(pthread_rwlockattr_t *rwlockattr, int pshared) 8871b3fa15SDavid Xu { 8971b3fa15SDavid Xu /* Only PTHREAD_PROCESS_PRIVATE is supported. */ 9071b3fa15SDavid Xu if (pshared != PTHREAD_PROCESS_PRIVATE) 9171b3fa15SDavid Xu return(EINVAL); 9271b3fa15SDavid Xu 9371b3fa15SDavid Xu (*rwlockattr)->pshared = pshared; 9471b3fa15SDavid Xu 9571b3fa15SDavid Xu return(0); 9671b3fa15SDavid Xu } 9771b3fa15SDavid Xu 985a1048c8SDavid Xu __strong_reference(_pthread_rwlockattr_destroy, pthread_rwlockattr_destroy); 995a1048c8SDavid Xu __strong_reference(_pthread_rwlockattr_getpshared, pthread_rwlockattr_getpshared); 1005a1048c8SDavid Xu __strong_reference(_pthread_rwlockattr_init, pthread_rwlockattr_init); 1015a1048c8SDavid Xu __strong_reference(_pthread_rwlockattr_setpshared, pthread_rwlockattr_setpshared); 1025a1048c8SDavid Xu 103