1*83f153ceSSiva Chandra Reddy //===-- Implementation of the pthread_mutexattr_setpshared ----------------===//
2*83f153ceSSiva Chandra Reddy //
3*83f153ceSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*83f153ceSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
5*83f153ceSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*83f153ceSSiva Chandra Reddy //
7*83f153ceSSiva Chandra Reddy //===----------------------------------------------------------------------===//
8*83f153ceSSiva Chandra Reddy 
9*83f153ceSSiva Chandra Reddy #include "pthread_mutexattr_setpshared.h"
10*83f153ceSSiva Chandra Reddy #include "pthread_mutexattr.h"
11*83f153ceSSiva Chandra Reddy 
12*83f153ceSSiva Chandra Reddy #include "src/__support/common.h"
13*83f153ceSSiva Chandra Reddy 
14*83f153ceSSiva Chandra Reddy #include <errno.h>
15*83f153ceSSiva Chandra Reddy #include <pthread.h>
16*83f153ceSSiva Chandra Reddy 
17*83f153ceSSiva Chandra Reddy namespace __llvm_libc {
18*83f153ceSSiva Chandra Reddy 
19*83f153ceSSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, pthread_mutexattr_setpshared,
20*83f153ceSSiva Chandra Reddy                    (pthread_mutexattr_t *__restrict attr, int pshared)) {
21*83f153ceSSiva Chandra Reddy   if (pshared != PTHREAD_PROCESS_PRIVATE && pshared != PTHREAD_PROCESS_SHARED)
22*83f153ceSSiva Chandra Reddy     return EINVAL;
23*83f153ceSSiva Chandra Reddy   pthread_mutexattr_t old = *attr;
24*83f153ceSSiva Chandra Reddy   old &= ~unsigned(PThreadMutexAttrPos::PSHARED_MASK);
25*83f153ceSSiva Chandra Reddy   *attr = old | (pshared << unsigned(PThreadMutexAttrPos::PSHARED_SHIFT));
26*83f153ceSSiva Chandra Reddy   return 0;
27*83f153ceSSiva Chandra Reddy }
28*83f153ceSSiva Chandra Reddy 
29*83f153ceSSiva Chandra Reddy } // namespace __llvm_libc
30