1*c9961bb2Spirofti /*	$OpenBSD: rthread_barrier_attr.c,v 1.1 2012/04/11 10:18:46 pirofti Exp $	*/
2*c9961bb2Spirofti /*
3*c9961bb2Spirofti  * Copyright (c) 2012 Paul Irofti <pirofti@openbsd.org>
4*c9961bb2Spirofti  *
5*c9961bb2Spirofti  * Permission to use, copy, modify, and/or distribute this software for any
6*c9961bb2Spirofti  * purpose with or without fee is hereby granted, provided that the above
7*c9961bb2Spirofti  * copyright notice and this permission notice appear in all copies.
8*c9961bb2Spirofti  *
9*c9961bb2Spirofti  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*c9961bb2Spirofti  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*c9961bb2Spirofti  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*c9961bb2Spirofti  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*c9961bb2Spirofti  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*c9961bb2Spirofti  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*c9961bb2Spirofti  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*c9961bb2Spirofti  */
17*c9961bb2Spirofti 
18*c9961bb2Spirofti #include <errno.h>
19*c9961bb2Spirofti #include <stdlib.h>
20*c9961bb2Spirofti 
21*c9961bb2Spirofti #include <pthread.h>
22*c9961bb2Spirofti 
23*c9961bb2Spirofti #include "rthread.h"
24*c9961bb2Spirofti 
25*c9961bb2Spirofti int
26*c9961bb2Spirofti pthread_barrierattr_init(pthread_barrierattr_t *attr)
27*c9961bb2Spirofti {
28*c9961bb2Spirofti 	if (attr == NULL) {
29*c9961bb2Spirofti 		return EINVAL;
30*c9961bb2Spirofti 	}
31*c9961bb2Spirofti 
32*c9961bb2Spirofti 	*attr = calloc(1, sizeof **attr);
33*c9961bb2Spirofti 	if (*attr == NULL) {
34*c9961bb2Spirofti 		return ENOMEM;
35*c9961bb2Spirofti 	}
36*c9961bb2Spirofti 
37*c9961bb2Spirofti 	(*attr)->pshared = PTHREAD_PROCESS_PRIVATE;
38*c9961bb2Spirofti 
39*c9961bb2Spirofti 	return 0;
40*c9961bb2Spirofti }
41*c9961bb2Spirofti 
42*c9961bb2Spirofti int
43*c9961bb2Spirofti pthread_barrierattr_destroy(pthread_barrierattr_t *attr)
44*c9961bb2Spirofti {
45*c9961bb2Spirofti 	if (attr == NULL || *attr == NULL) {
46*c9961bb2Spirofti 		return EINVAL;
47*c9961bb2Spirofti 	}
48*c9961bb2Spirofti 	free(*attr);
49*c9961bb2Spirofti 	return 0;
50*c9961bb2Spirofti }
51*c9961bb2Spirofti 
52*c9961bb2Spirofti int
53*c9961bb2Spirofti pthread_barrierattr_getpshared(pthread_barrierattr_t *attr, int *pshared)
54*c9961bb2Spirofti {
55*c9961bb2Spirofti 	if (attr == NULL || *attr == NULL) {
56*c9961bb2Spirofti 		return EINVAL;
57*c9961bb2Spirofti 	}
58*c9961bb2Spirofti 	*pshared = (*attr)->pshared;
59*c9961bb2Spirofti 	return 0;
60*c9961bb2Spirofti }
61*c9961bb2Spirofti 
62*c9961bb2Spirofti int
63*c9961bb2Spirofti pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared)
64*c9961bb2Spirofti {
65*c9961bb2Spirofti 	if (attr == NULL || *attr == NULL) {
66*c9961bb2Spirofti 		return EINVAL;
67*c9961bb2Spirofti 	}
68*c9961bb2Spirofti 
69*c9961bb2Spirofti 	if (pshared != PTHREAD_PROCESS_PRIVATE) {
70*c9961bb2Spirofti 		return ENOTSUP;
71*c9961bb2Spirofti 	}
72*c9961bb2Spirofti 
73*c9961bb2Spirofti 	(*attr)->pshared = pshared;
74*c9961bb2Spirofti 
75*c9961bb2Spirofti 	return 0;
76*c9961bb2Spirofti }
77