1/*
2 * Copyright 2007, Ryan Leavengood, leavengood@gmail.com.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5
6
7#include <pthread.h>
8#include "pthread_private.h"
9
10#include <stdlib.h>
11
12
13int
14pthread_condattr_init(pthread_condattr_t *_condAttr)
15{
16	pthread_condattr *attr;
17
18	if (_condAttr == NULL)
19		return B_BAD_VALUE;
20
21	attr = (pthread_condattr *)malloc(sizeof(pthread_condattr));
22	if (attr == NULL)
23		return B_NO_MEMORY;
24
25	attr->process_shared = false;
26
27	*_condAttr = attr;
28	return B_OK;
29}
30
31
32int
33pthread_condattr_destroy(pthread_condattr_t *_condAttr)
34{
35	pthread_condattr *attr;
36
37	if (_condAttr == NULL || (attr = *_condAttr) == NULL)
38		return B_BAD_VALUE;
39
40	*_condAttr = NULL;
41	free(attr);
42
43	return B_OK;
44}
45
46
47int
48pthread_condattr_getpshared(const pthread_condattr_t *_condAttr, int *_processShared)
49{
50	pthread_condattr *attr;
51
52	if (_condAttr == NULL || (attr = *_condAttr) == NULL || _processShared == NULL)
53		return B_BAD_VALUE;
54
55	*_processShared = attr->process_shared ? PTHREAD_PROCESS_SHARED : PTHREAD_PROCESS_PRIVATE;
56	return B_OK;
57}
58
59
60int
61pthread_condattr_setpshared(pthread_condattr_t *_condAttr, int processShared)
62{
63	pthread_condattr *attr;
64
65	if (_condAttr == NULL || (attr = *_condAttr) == NULL
66		|| processShared < PTHREAD_PROCESS_PRIVATE
67		|| processShared > PTHREAD_PROCESS_SHARED)
68		return B_BAD_VALUE;
69
70	attr->process_shared = processShared == PTHREAD_PROCESS_SHARED ? true : false;
71	return B_OK;
72}
73
74