1112918Sjeff/*- 2112918Sjeff * Copyright (c) 1998 Alex Nash 3112918Sjeff * All rights reserved. 4112918Sjeff * 5112918Sjeff * Redistribution and use in source and binary forms, with or without 6112918Sjeff * modification, are permitted provided that the following conditions 7112918Sjeff * are met: 8112918Sjeff * 1. Redistributions of source code must retain the above copyright 9112918Sjeff * notice, this list of conditions and the following disclaimer. 10112918Sjeff * 2. Redistributions in binary form must reproduce the above copyright 11112918Sjeff * notice, this list of conditions and the following disclaimer in the 12112918Sjeff * documentation and/or other materials provided with the distribution. 13112918Sjeff * 14112918Sjeff * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15112918Sjeff * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16112918Sjeff * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17112918Sjeff * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18112918Sjeff * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19112918Sjeff * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20112918Sjeff * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21112918Sjeff * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22112918Sjeff * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23112918Sjeff * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24112918Sjeff * SUCH DAMAGE. 25112918Sjeff * 26112918Sjeff * $FreeBSD: releng/10.3/lib/libthr/thread/thr_rwlockattr.c 214093 2010-10-20 02:34:02Z davidxu $ 27112918Sjeff */ 28112918Sjeff 29157457Sdavidxu#include "namespace.h" 30112918Sjeff#include <errno.h> 31112918Sjeff#include <stdlib.h> 32157457Sdavidxu#include <pthread.h> 33157457Sdavidxu#include "un-namespace.h" 34112918Sjeff 35112918Sjeff#include "thr_private.h" 36112918Sjeff 37112918Sjeff__weak_reference(_pthread_rwlockattr_destroy, pthread_rwlockattr_destroy); 38112918Sjeff__weak_reference(_pthread_rwlockattr_getpshared, pthread_rwlockattr_getpshared); 39112918Sjeff__weak_reference(_pthread_rwlockattr_init, pthread_rwlockattr_init); 40112918Sjeff__weak_reference(_pthread_rwlockattr_setpshared, pthread_rwlockattr_setpshared); 41112918Sjeff 42112918Sjeffint 43112918Sjeff_pthread_rwlockattr_destroy(pthread_rwlockattr_t *rwlockattr) 44112918Sjeff{ 45112918Sjeff pthread_rwlockattr_t prwlockattr; 46112918Sjeff 47112918Sjeff if (rwlockattr == NULL) 48112918Sjeff return(EINVAL); 49112918Sjeff 50112918Sjeff prwlockattr = *rwlockattr; 51112918Sjeff 52112918Sjeff if (prwlockattr == NULL) 53112918Sjeff return(EINVAL); 54112918Sjeff 55112918Sjeff free(prwlockattr); 56112918Sjeff 57112918Sjeff return(0); 58112918Sjeff} 59112918Sjeff 60112918Sjeffint 61112918Sjeff_pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *rwlockattr, 62112918Sjeff int *pshared) 63112918Sjeff{ 64112918Sjeff *pshared = (*rwlockattr)->pshared; 65112918Sjeff 66112918Sjeff return(0); 67112918Sjeff} 68112918Sjeff 69112918Sjeffint 70112918Sjeff_pthread_rwlockattr_init(pthread_rwlockattr_t *rwlockattr) 71112918Sjeff{ 72112918Sjeff pthread_rwlockattr_t prwlockattr; 73112918Sjeff 74112918Sjeff if (rwlockattr == NULL) 75112918Sjeff return(EINVAL); 76112918Sjeff 77112918Sjeff prwlockattr = (pthread_rwlockattr_t) 78112918Sjeff malloc(sizeof(struct pthread_rwlockattr)); 79112918Sjeff 80112918Sjeff if (prwlockattr == NULL) 81112918Sjeff return(ENOMEM); 82112918Sjeff 83112918Sjeff prwlockattr->pshared = PTHREAD_PROCESS_PRIVATE; 84112918Sjeff *rwlockattr = prwlockattr; 85112918Sjeff 86112918Sjeff return(0); 87112918Sjeff} 88112918Sjeff 89112918Sjeffint 90112918Sjeff_pthread_rwlockattr_setpshared(pthread_rwlockattr_t *rwlockattr, int pshared) 91112918Sjeff{ 92112918Sjeff /* Only PTHREAD_PROCESS_PRIVATE is supported. */ 93112918Sjeff if (pshared != PTHREAD_PROCESS_PRIVATE) 94112918Sjeff return(EINVAL); 95112918Sjeff 96112918Sjeff (*rwlockattr)->pshared = pshared; 97112918Sjeff 98112918Sjeff return(0); 99112918Sjeff} 100