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