thr_condattr.c revision 208503
1193323Sed/*
2193323Sed * Copyright (c) 1997 John Birrell <jb@cimlogic.com.au>.
3193323Sed * All rights reserved.
4193323Sed *
5193323Sed * Redistribution and use in source and binary forms, with or without
6193323Sed * modification, are permitted provided that the following conditions
7193323Sed * are met:
8193323Sed * 1. Redistributions of source code must retain the above copyright
9193323Sed *    notice, this list of conditions and the following disclaimer.
10193323Sed * 2. Redistributions in binary form must reproduce the above copyright
11193323Sed *    notice, this list of conditions and the following disclaimer in the
12193323Sed *    documentation and/or other materials provided with the distribution.
13193323Sed * 3. Neither the name of the author nor the names of any co-contributors
14193323Sed *    may be used to endorse or promote products derived from this software
15193323Sed *    without specific prior written permission.
16193323Sed *
17193323Sed * THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
18198090Srdivacky * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19198090Srdivacky * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20193323Sed * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21193323Sed * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22193323Sed * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23193323Sed * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24193323Sed * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25193323Sed * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26198090Srdivacky * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27198090Srdivacky * SUCH DAMAGE.
28193323Sed *
29193323Sed * $FreeBSD: head/lib/libthr/thread/thr_condattr.c 208503 2010-05-24 13:44:39Z deischen $
30193323Sed */
31193323Sed
32193323Sed#include "namespace.h"
33193323Sed#include <stdlib.h>
34193323Sed#include <string.h>
35202375Srdivacky#include <errno.h>
36198090Srdivacky#include <pthread.h>
37202375Srdivacky#include "un-namespace.h"
38193323Sed
39193323Sed#include "thr_private.h"
40193323Sed
41193323Sed__weak_reference(_pthread_condattr_init, pthread_condattr_init);
42193323Sed__weak_reference(_pthread_condattr_destroy, pthread_condattr_destroy);
43202375Srdivacky__weak_reference(_pthread_condattr_getclock, pthread_condattr_getclock);
44198090Srdivacky__weak_reference(_pthread_condattr_setclock, pthread_condattr_setclock);
45202375Srdivacky__weak_reference(_pthread_condattr_getpshared, pthread_condattr_getpshared);
46193323Sed__weak_reference(_pthread_condattr_setpshared, pthread_condattr_setpshared);
47198090Srdivacky
48193323Sedint
49193323Sed_pthread_condattr_init(pthread_condattr_t *attr)
50193323Sed{
51193323Sed	pthread_condattr_t pattr;
52193323Sed	int ret;
53202375Srdivacky
54193323Sed	if ((pattr = (pthread_condattr_t)
55193323Sed	    malloc(sizeof(struct pthread_cond_attr))) == NULL) {
56193323Sed		ret = ENOMEM;
57193323Sed	} else {
58202375Srdivacky		memcpy(pattr, &_pthread_condattr_default,
59193323Sed		    sizeof(struct pthread_cond_attr));
60193323Sed		*attr = pattr;
61198090Srdivacky		ret = 0;
62193323Sed	}
63193323Sed	return (ret);
64193323Sed}
65193323Sed
66193323Sedint
67193323Sed_pthread_condattr_destroy(pthread_condattr_t *attr)
68193323Sed{
69193323Sed	int	ret;
70193323Sed
71193323Sed	if (attr == NULL || *attr == NULL) {
72193323Sed		ret = EINVAL;
73193323Sed	} else {
74193323Sed		free(*attr);
75193323Sed		*attr = NULL;
76193323Sed		ret = 0;
77193323Sed	}
78193323Sed	return(ret);
79193323Sed}
80193323Sed
81198090Srdivackyint
82193323Sed_pthread_condattr_getclock(const pthread_condattr_t *attr, clockid_t *clock_id)
83193323Sed{
84198090Srdivacky	if (attr == NULL || *attr == NULL)
85198090Srdivacky		return (EINVAL);
86198090Srdivacky	*clock_id = (*attr)->c_clockid;
87198090Srdivacky	return (0);
88198090Srdivacky}
89193323Sed
90193323Sedint
91193323Sed_pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clock_id)
92193323Sed{
93193323Sed	if (attr == NULL || *attr == NULL)
94193323Sed		return (EINVAL);
95193323Sed	if (clock_id != CLOCK_REALTIME &&
96193323Sed	    clock_id != CLOCK_VIRTUAL &&
97193323Sed	    clock_id != CLOCK_PROF &&
98193323Sed	    clock_id != CLOCK_MONOTONIC) {
99193323Sed		return  (EINVAL);
100193323Sed	}
101193323Sed	(*attr)->c_clockid = clock_id;
102193323Sed	return (0);
103193323Sed}
104193323Sed
105198090Srdivackyint
106193323Sed_pthread_condattr_getpshared(const pthread_condattr_t *attr, int *pshared)
107193323Sed{
108198090Srdivacky	if (attr == NULL || *attr == NULL)
109198090Srdivacky		return (EINVAL);
110198090Srdivacky
111193323Sed	*pshared = PTHREAD_PROCESS_PRIVATE;
112193323Sed	return (0);
113193323Sed}
114193323Sed
115193323Sedint
116193323Sed_pthread_condattr_setpshared(pthread_condattr_t *attr, int pshared)
117193323Sed{
118193323Sed	if (attr == NULL || *attr == NULL)
119193323Sed		return (EINVAL);
120193323Sed
121193323Sed	if  (pshared != PTHREAD_PROCESS_PRIVATE)
122193323Sed		return (EINVAL);
123193323Sed	return (0);
124193323Sed}
125193323Sed