diff options
Diffstat (limited to 'attr.c')
-rw-r--r-- | attr.c | 100 |
1 files changed, 100 insertions, 0 deletions
@@ -0,0 +1,100 @@ +/* + * attr.c + * + * Description: + * This translation unit implements operations on thread attribute objects. + */ + +#include "pthread.h" +#include "implement.h" + +int +pthread_attr_setstacksize(pthread_attr_t *attr, + size_t stacksize) +{ + /* Verify that the stack size is within range. */ + if (stacksize < PTHREAD_STACK_MIN) + { + return EINVAL; + } + + if (is_attr(attr) != 0) + { + return EINVAL; + } + + /* Everything is okay. */ + (_pthread_attr_t *) (attr->ptr)->stacksize = stacksize; + return 0; +} + +int +pthread_attr_getstacksize(const pthread_attr_t *attr, + size_t *stacksize) +{ + if (is_attr(attr) != 0) + { + return EINVAL; + } + + /* Everything is okay. */ + *stacksize = (_pthread_attr_t *) (attr->ptr)->stacksize; + return 0; +} + +int +pthread_attr_setstackaddr(pthread_attr_t *attr, + void *stackaddr) +{ + if ((is_attr(attr) != 0)) + { + return EINVAL; + } + + /* FIXME: it does not look like Win32 permits this. */ + return ENOSYS; +} + +int +pthread_attr_getstackaddr(const pthread_attr_t *attr, + void **stackaddr) +{ + if ((is_attr(attr) != 0)) + { + return EINVAL; + } + + /* FIXME: it does not look like Win32 permits this. */ + return ENOSYS; +} + +int +pthread_attr_init(pthread_attr_t *attr) +{ + if (attr == NULL) + { + /* This is disallowed. */ + return EINVAL; + } + + attr->ptr = malloc(sizeof(_pthread_attr_t)); + if (attr->ptr == NULL) + { + return ENOMEM; + } + + /* FIXME: Fill out the structure with default values. */ + return 0; +} + +int +pthread_attr_destroy(pthread_attr_t *attr) +{ + if (is_attr(attr) != 0) + { + return EINVAL; + } + + free (attr->ptr); + return 0; +} |