summaryrefslogtreecommitdiff
path: root/src/thread/pthread_attr_get.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-11-11 16:08:38 -0500
committerRich Felker <dalias@aerifal.cx>2012-11-11 16:08:38 -0500
commitc4a35f8c2a4b1a7e62a4b9e5b2748fb4fbcace79 (patch)
treefb09ffd21bf934a0bf36e6fc583726c07bf43e96 /src/thread/pthread_attr_get.c
parent7df42e8744d384c975b28192f66ab4c5e4c1fd90 (diff)
downloadmusl-c4a35f8c2a4b1a7e62a4b9e5b2748fb4fbcace79.tar.gz
debloat src/thread tree but putting lots of junk in one file
POSIX includes mostly-useless attribute-get functions for each attribute-set function, presumably out of some object-oriented dogmatism. the get functions are not useful with the simple idiomatic usage of attributes. there are of course possible valid uses of them (like writing wrappers for pthread init functions that perform special actions on the presence of certain attributes), but considering how tiny these functions are anyway, little is lost by putting them all in one file, and some build-time cost and archive-file-size benefits are achieved.
Diffstat (limited to 'src/thread/pthread_attr_get.c')
-rw-r--r--src/thread/pthread_attr_get.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/thread/pthread_attr_get.c b/src/thread/pthread_attr_get.c
new file mode 100644
index 00000000..f81103d8
--- /dev/null
+++ b/src/thread/pthread_attr_get.c
@@ -0,0 +1,93 @@
+#include "pthread_impl.h"
+
+int pthread_attr_getdetachstate(const pthread_attr_t *a, int *state)
+{
+ *state = a->_a_detach;
+ return 0;
+}
+int pthread_attr_getguardsize(const pthread_attr_t *restrict a, size_t *restrict size)
+{
+ *size = a->_a_guardsize + DEFAULT_GUARD_SIZE;
+ return 0;
+}
+
+int pthread_attr_getinheritsched(const pthread_attr_t *a, int *inherit)
+{
+ *inherit = a->_a_sched;
+ return 0;
+}
+
+int pthread_attr_getschedparam(const pthread_attr_t *restrict a, struct sched_param *restrict param)
+{
+ param->sched_priority = a->_a_prio;
+ return 0;
+}
+
+int pthread_attr_getschedpolicy(const pthread_attr_t *a, int *policy)
+{
+ *policy = a->_a_policy;
+ return 0;
+}
+
+int pthread_attr_getscope(const pthread_attr_t *restrict a, int *restrict scope)
+{
+ *scope = PTHREAD_SCOPE_SYSTEM;
+ return 0;
+}
+
+int pthread_attr_getstack(const pthread_attr_t *restrict a, void **restrict addr, size_t *restrict size)
+{
+ if (!a->_a_stackaddr)
+ return EINVAL;
+ *size = a->_a_stacksize + DEFAULT_STACK_SIZE;
+ *addr = (void *)(a->_a_stackaddr - *size);
+ return 0;
+}
+
+int pthread_attr_getstacksize(const pthread_attr_t *restrict a, size_t *restrict size)
+{
+ *size = a->_a_stacksize + DEFAULT_STACK_SIZE;
+ return 0;
+}
+
+int pthread_barrierattr_getpshared(const pthread_barrierattr_t *restrict a, int *restrict pshared)
+{
+ *pshared = !!*a;
+ return 0;
+}
+
+int pthread_condattr_getclock(const pthread_condattr_t *restrict a, clockid_t *restrict clk)
+{
+ *clk = *a & 0x7fffffff;
+ return 0;
+}
+
+int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restrict pshared)
+{
+ *pshared = *a>>31;
+ return 0;
+}
+
+int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared)
+{
+ *pshared = *a>>31;
+ return 0;
+}
+
+int pthread_mutexattr_getrobust(const pthread_mutexattr_t *restrict a, int *restrict robust)
+{
+ *robust = *a / 4U % 2;
+ return 0;
+}
+
+int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict a, int *restrict type)
+{
+ *type = *a & 3;
+ return 0;
+}
+
+int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict a, int *restrict pshared)
+{
+ *pshared = *(int *)a;
+ return 0;
+}