xref: /openbsd-src/lib/librthread/rthread_rwlockattr.c (revision 75dc96759f4d881590fbd2831990a4203546b7b7)
1*75dc9675Sguenther /*	$OpenBSD: rthread_rwlockattr.c,v 1.2 2012/02/15 04:58:42 guenther Exp $ */
271f897f1Sguenther /*
371f897f1Sguenther  * Copyright (c) 2004,2005 Ted Unangst <tedu@openbsd.org>
471f897f1Sguenther  * All Rights Reserved.
571f897f1Sguenther  *
671f897f1Sguenther  * Permission to use, copy, modify, and distribute this software for any
771f897f1Sguenther  * purpose with or without fee is hereby granted, provided that the above
871f897f1Sguenther  * copyright notice and this permission notice appear in all copies.
971f897f1Sguenther  *
1071f897f1Sguenther  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1171f897f1Sguenther  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1271f897f1Sguenther  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1371f897f1Sguenther  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1471f897f1Sguenther  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1571f897f1Sguenther  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1671f897f1Sguenther  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1771f897f1Sguenther  */
1871f897f1Sguenther /*
1971f897f1Sguenther  * rwlock attributes
2071f897f1Sguenther  */
2171f897f1Sguenther 
2271f897f1Sguenther 
2371f897f1Sguenther #include <stdlib.h>
2471f897f1Sguenther #include <unistd.h>
2571f897f1Sguenther #include <errno.h>
2671f897f1Sguenther 
2771f897f1Sguenther #include <pthread.h>
2871f897f1Sguenther 
2971f897f1Sguenther #include "rthread.h"
3071f897f1Sguenther 
3171f897f1Sguenther int
pthread_rwlockattr_init(pthread_rwlockattr_t * attrp)3271f897f1Sguenther pthread_rwlockattr_init(pthread_rwlockattr_t *attrp)
3371f897f1Sguenther {
3471f897f1Sguenther 	pthread_rwlockattr_t attr;
3571f897f1Sguenther 
3671f897f1Sguenther 	attr = calloc(1, sizeof(*attr));
3771f897f1Sguenther 	if (!attr)
3871f897f1Sguenther 		return (errno);
39*75dc9675Sguenther 	attr->pshared = PTHREAD_PROCESS_PRIVATE;
4071f897f1Sguenther 	*attrp = attr;
4171f897f1Sguenther 
4271f897f1Sguenther 	return (0);
4371f897f1Sguenther }
4471f897f1Sguenther 
4571f897f1Sguenther int
pthread_rwlockattr_destroy(pthread_rwlockattr_t * attrp)4671f897f1Sguenther pthread_rwlockattr_destroy(pthread_rwlockattr_t *attrp)
4771f897f1Sguenther {
4871f897f1Sguenther 	free(*attrp);
4971f897f1Sguenther 	*attrp = NULL;
5071f897f1Sguenther 
5171f897f1Sguenther 	return (0);
5271f897f1Sguenther }
53*75dc9675Sguenther 
54*75dc9675Sguenther int
pthread_rwlockattr_getpshared(const pthread_rwlockattr_t * attrp,int * pshared)55*75dc9675Sguenther pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *attrp, int *pshared)
56*75dc9675Sguenther {
57*75dc9675Sguenther 	*pshared = (*attrp)->pshared;
58*75dc9675Sguenther 
59*75dc9675Sguenther 	return (0);
60*75dc9675Sguenther }
61*75dc9675Sguenther 
62*75dc9675Sguenther int
pthread_rwlockattr_setpshared(pthread_rwlockattr_t * attrp,int pshared)63*75dc9675Sguenther pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attrp, int pshared)
64*75dc9675Sguenther {
65*75dc9675Sguenther 	/* only PTHREAD_PROCESS_PRIVATE is supported */
66*75dc9675Sguenther 	if (pshared != PTHREAD_PROCESS_PRIVATE)
67*75dc9675Sguenther 		return (EINVAL);
68*75dc9675Sguenther 
69*75dc9675Sguenther 	(*attrp)->pshared = pshared;
70*75dc9675Sguenther 
71*75dc9675Sguenther 	return (0);
72*75dc9675Sguenther }
73