From 6e5f2493a97e4d441ade2eccc1f5c474e71c01f3 Mon Sep 17 00:00:00 2001 From: Jennifer Averett Date: Tue, 14 Jan 2014 09:43:14 -0600 Subject: posix: Add pthread_getattr_np(). This is a useful POSIX thread API helper which is found in `GNU/Linux and *BSD. --- cpukit/posix/Makefile.am | 1 + cpukit/posix/src/pthreadgetattrnp.c | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 cpukit/posix/src/pthreadgetattrnp.c (limited to 'cpukit/posix') diff --git a/cpukit/posix/Makefile.am b/cpukit/posix/Makefile.am index 9dc8820507..ccadd63630 100644 --- a/cpukit/posix/Makefile.am +++ b/cpukit/posix/Makefile.am @@ -130,6 +130,7 @@ libposix_a_SOURCES += src/pthreadatfork.c src/pthreadattrdestroy.c \ src/pthreadattrsetschedparam.c src/pthreadattrsetschedpolicy.c \ src/pthreadattrsetscope.c src/pthreadattrsetstackaddr.c \ src/pthreadattrsetstack.c src/pthreadattrsetstacksize.c \ + src/pthreadgetattrnp.c \ src/pthreadattrgetguardsize.c src/pthread.c \ src/pthreadcreate.c src/pthreaddetach.c src/pthreadequal.c \ src/pthreadexit.c src/pthreadgetcpuclockid.c \ diff --git a/cpukit/posix/src/pthreadgetattrnp.c b/cpukit/posix/src/pthreadgetattrnp.c new file mode 100644 index 0000000000..f71819f998 --- /dev/null +++ b/cpukit/posix/src/pthreadgetattrnp.c @@ -0,0 +1,57 @@ +/** + * @file + * + * @brief Pthread Get Attribute + * @ingroup POSIXAPI + */ + +/* + * COPYRIGHT (c) 2014. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#define _GNU_SOURCE +#include +#include + +#include +#include + +int pthread_getattr_np( + pthread_t id, + pthread_attr_t *attr +) +{ + Objects_Locations location; + POSIX_API_Control *api; + Thread_Control *the_thread; + + if ( !attr ) + return EINVAL; + + the_thread = _Thread_Get( id, &location ); + switch ( location ) { + + case OBJECTS_LOCAL: + api = the_thread->API_Extensions[ THREAD_API_POSIX ]; + _POSIX_Threads_Copy_attributes( attr, &api->Attributes); + _Objects_Put( &the_thread->Object ); + return 0; + +#if defined(RTEMS_MULTIPROCESSING) + case OBJECTS_REMOTE: +#endif + case OBJECTS_ERROR: + break; + } + + return ESRCH; +} -- cgit v1.2.3