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 attr->clock_id = CLOCK_REALTIME; 27 28 *_condAttr = attr; 29 return B_OK; 30} 31 32 33int 34pthread_condattr_destroy(pthread_condattr_t *_condAttr) 35{ 36 pthread_condattr *attr; 37 38 if (_condAttr == NULL || (attr = *_condAttr) == NULL) 39 return B_BAD_VALUE; 40 41 *_condAttr = NULL; 42 free(attr); 43 44 return B_OK; 45} 46 47 48int 49pthread_condattr_getpshared(const pthread_condattr_t *_condAttr, int *_processShared) 50{ 51 pthread_condattr *attr; 52 53 if (_condAttr == NULL || (attr = *_condAttr) == NULL || _processShared == NULL) 54 return B_BAD_VALUE; 55 56 *_processShared = attr->process_shared ? PTHREAD_PROCESS_SHARED : PTHREAD_PROCESS_PRIVATE; 57 return B_OK; 58} 59 60 61int 62pthread_condattr_setpshared(pthread_condattr_t *_condAttr, int processShared) 63{ 64 pthread_condattr *attr; 65 66 if (_condAttr == NULL || (attr = *_condAttr) == NULL 67 || processShared < PTHREAD_PROCESS_PRIVATE 68 || processShared > PTHREAD_PROCESS_SHARED) 69 return B_BAD_VALUE; 70 71 attr->process_shared = processShared == PTHREAD_PROCESS_SHARED ? true : false; 72 return B_OK; 73} 74 75 76int 77pthread_condattr_getclock(const pthread_condattr_t *_condAttr, clockid_t *_clockID) 78{ 79 pthread_condattr *attr; 80 81 if (_condAttr == NULL || (attr = *_condAttr) == NULL || _clockID == NULL) 82 return B_BAD_VALUE; 83 84 *_clockID = attr->clock_id; 85 return B_OK; 86} 87 88 89int 90pthread_condattr_setclock(pthread_condattr_t *_condAttr, clockid_t clockID) 91{ 92 pthread_condattr *attr; 93 94 if (_condAttr == NULL || (attr = *_condAttr) == NULL 95 || (clockID != CLOCK_REALTIME && clockID != CLOCK_MONOTONIC)) 96 return B_BAD_VALUE; 97 98 attr->clock_id = clockID; 99 return B_OK; 100} 101