1/* 2 * Copyright 2003-2007, Axel Dörfler, axeld@pinc-software.de. All rights reserved. 3 * 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_mutexattr_init(pthread_mutexattr_t *_mutexAttr) 15{ 16 pthread_mutexattr *attr; 17 18 if (_mutexAttr == NULL) 19 return B_BAD_VALUE; 20 21 attr = (pthread_mutexattr *)malloc(sizeof(pthread_mutexattr)); 22 if (attr == NULL) 23 return B_NO_MEMORY; 24 25 attr->type = PTHREAD_MUTEX_DEFAULT; 26 attr->process_shared = false; 27 28 *_mutexAttr = attr; 29 return B_OK; 30} 31 32 33int 34pthread_mutexattr_destroy(pthread_mutexattr_t *_mutexAttr) 35{ 36 pthread_mutexattr *attr; 37 38 if (_mutexAttr == NULL || (attr = *_mutexAttr) == NULL) 39 return B_BAD_VALUE; 40 41 *_mutexAttr = NULL; 42 free(attr); 43 44 return B_OK; 45} 46 47 48int 49pthread_mutexattr_gettype(pthread_mutexattr_t *_mutexAttr, int *_type) 50{ 51 pthread_mutexattr *attr; 52 53 if (_mutexAttr == NULL || (attr = *_mutexAttr) == NULL || _type == NULL) 54 return B_BAD_VALUE; 55 56 *_type = attr->type; 57 return B_OK; 58} 59 60 61int 62pthread_mutexattr_settype(pthread_mutexattr_t *_mutexAttr, int type) 63{ 64 pthread_mutexattr *attr; 65 66 if (_mutexAttr == NULL || (attr = *_mutexAttr) == NULL 67 || type < PTHREAD_MUTEX_DEFAULT 68 || type > PTHREAD_MUTEX_RECURSIVE) 69 return B_BAD_VALUE; 70 71 attr->type = type; 72 return B_OK; 73} 74 75 76int 77pthread_mutexattr_getpshared(pthread_mutexattr_t *_mutexAttr, int *_processShared) 78{ 79 pthread_mutexattr *attr; 80 81 if (_mutexAttr == NULL || (attr = *_mutexAttr) == NULL || _processShared == NULL) 82 return B_BAD_VALUE; 83 84 *_processShared = attr->process_shared ? PTHREAD_PROCESS_SHARED : PTHREAD_PROCESS_PRIVATE; 85 return B_OK; 86} 87 88 89int 90pthread_mutexattr_setpshared(pthread_mutexattr_t *_mutexAttr, int processShared) 91{ 92 pthread_mutexattr *attr; 93 94 if (_mutexAttr == NULL || (attr = *_mutexAttr) == NULL 95 || processShared < PTHREAD_PROCESS_PRIVATE 96 || processShared > PTHREAD_PROCESS_SHARED) 97 return B_BAD_VALUE; 98 99 attr->process_shared = processShared == PTHREAD_PROCESS_SHARED ? true : false; 100 return B_OK; 101} 102 103 104int 105pthread_mutexattr_getprioceiling(pthread_mutexattr_t *_mutexAttr, int *_priorityCeiling) 106{ 107 pthread_mutexattr *attr; 108 109 if (_mutexAttr == NULL || (attr = *_mutexAttr) == NULL || _priorityCeiling == NULL) 110 return B_BAD_VALUE; 111 112 *_priorityCeiling = 0; 113 // not implemented 114 115 return B_OK; 116} 117 118 119int 120pthread_mutexattr_setprioceiling(pthread_mutexattr_t *_mutexAttr, int priorityCeiling) 121{ 122 pthread_mutexattr *attr; 123 124 if (_mutexAttr == NULL || (attr = *_mutexAttr) == NULL) 125 return B_BAD_VALUE; 126 127 // not implemented 128 return B_NOT_ALLOWED; 129} 130 131 132int 133pthread_mutexattr_getprotocol(pthread_mutexattr_t *_mutexAttr, int *_protocol) 134{ 135 pthread_mutexattr *attr; 136 137 if (_mutexAttr == NULL || (attr = *_mutexAttr) == NULL || _protocol == NULL) 138 return B_BAD_VALUE; 139 140 *_protocol = 0; 141 // not implemented 142 143 return B_OK; 144} 145 146 147int 148pthread_mutexattr_setprotocol(pthread_mutexattr_t *_mutexAttr, int protocol) 149{ 150 pthread_mutexattr *attr; 151 152 if (_mutexAttr == NULL || (attr = *_mutexAttr) == NULL) 153 return B_BAD_VALUE; 154 155 // not implemented 156 return B_NOT_ALLOWED; 157} 158