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