1 #include "pthread_impl.h"
2 
pthread_attr_getdetachstate(const pthread_attr_t * a,int * state)3 int pthread_attr_getdetachstate(const pthread_attr_t *a, int *state)
4 {
5 	*state = a->_a_detach;
6 	return 0;
7 }
pthread_attr_getguardsize(const pthread_attr_t * restrict a,size_t * restrict size)8 int pthread_attr_getguardsize(const pthread_attr_t *restrict a, size_t *restrict size)
9 {
10 	*size = a->_a_guardsize;
11 	return 0;
12 }
13 
pthread_attr_getinheritsched(const pthread_attr_t * restrict a,int * restrict inherit)14 int pthread_attr_getinheritsched(const pthread_attr_t *restrict a, int *restrict inherit)
15 {
16 	*inherit = a->_a_sched;
17 	return 0;
18 }
19 
pthread_attr_getschedparam(const pthread_attr_t * restrict a,struct sched_param * restrict param)20 int pthread_attr_getschedparam(const pthread_attr_t *restrict a, struct sched_param *restrict param)
21 {
22 	param->sched_priority = a->_a_prio;
23 	return 0;
24 }
25 
pthread_attr_getschedpolicy(const pthread_attr_t * restrict a,int * restrict policy)26 int pthread_attr_getschedpolicy(const pthread_attr_t *restrict a, int *restrict policy)
27 {
28 	*policy = a->_a_policy;
29 	return 0;
30 }
31 
pthread_attr_getscope(const pthread_attr_t * restrict a,int * restrict scope)32 int pthread_attr_getscope(const pthread_attr_t *restrict a, int *restrict scope)
33 {
34 	*scope = PTHREAD_SCOPE_SYSTEM;
35 	return 0;
36 }
37 
pthread_attr_getstack(const pthread_attr_t * restrict a,void ** restrict addr,size_t * restrict size)38 int pthread_attr_getstack(const pthread_attr_t *restrict a, void **restrict addr, size_t *restrict size)
39 {
40 	if (!a->_a_stackaddr)
41 		return EINVAL;
42 	*size = a->_a_stacksize;
43 	*addr = (void *)(a->_a_stackaddr - *size);
44 	return 0;
45 }
46 
pthread_attr_getstacksize(const pthread_attr_t * restrict a,size_t * restrict size)47 int pthread_attr_getstacksize(const pthread_attr_t *restrict a, size_t *restrict size)
48 {
49 	*size = a->_a_stacksize;
50 	return 0;
51 }
52 
pthread_barrierattr_getpshared(const pthread_barrierattr_t * restrict a,int * restrict pshared)53 int pthread_barrierattr_getpshared(const pthread_barrierattr_t *restrict a, int *restrict pshared)
54 {
55 	*pshared = !!a->__attr;
56 	return 0;
57 }
58 
pthread_condattr_getclock(const pthread_condattr_t * restrict a,clockid_t * restrict clk)59 int pthread_condattr_getclock(const pthread_condattr_t *restrict a, clockid_t *restrict clk)
60 {
61 	*clk = a->__attr & 0x7fffffff;
62 	return 0;
63 }
64 
pthread_condattr_getpshared(const pthread_condattr_t * restrict a,int * restrict pshared)65 int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restrict pshared)
66 {
67 	*pshared = a->__attr>>31;
68 	return 0;
69 }
70 
pthread_mutexattr_getprotocol(const pthread_mutexattr_t * restrict a,int * restrict protocol)71 int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict a, int *restrict protocol)
72 {
73 	*protocol = a->__attr / 8U % 2;
74 	return 0;
75 }
pthread_mutexattr_getpshared(const pthread_mutexattr_t * restrict a,int * restrict pshared)76 int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared)
77 {
78 	*pshared = a->__attr / 128U % 2;
79 	return 0;
80 }
81 
pthread_mutexattr_getrobust(const pthread_mutexattr_t * restrict a,int * restrict robust)82 int pthread_mutexattr_getrobust(const pthread_mutexattr_t *restrict a, int *restrict robust)
83 {
84 	*robust = a->__attr / 4U % 2;
85 	return 0;
86 }
87 
pthread_mutexattr_gettype(const pthread_mutexattr_t * restrict a,int * restrict type)88 int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict a, int *restrict type)
89 {
90 	*type = a->__attr & 3;
91 	return 0;
92 }
93 
pthread_rwlockattr_getpshared(const pthread_rwlockattr_t * restrict a,int * restrict pshared)94 int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict a, int *restrict pshared)
95 {
96 	*pshared = a->__attr[0];
97 	return 0;
98 }
99