diff options
author | bje <bje> | 1998-07-12 11:26:43 +0000 |
---|---|---|
committer | bje <bje> | 1998-07-12 11:26:43 +0000 |
commit | f4a31d3296b11194d92b0983ba1dddb363436298 (patch) | |
tree | a51f15f3114a92234218fa8892cff504f6b9da92 | |
parent | a0c8a187f3c4d5107ab1f3ad265128ad92725222 (diff) |
* mutex.c (pthread_mutexattr_init): Implement.
(pthread_mutexattr_destroy): Implement.
(pthread_mutexattr_setpshared): Likewise.
(pthread_mutexattr_getpshared): Likewise.
(insert_attr): New function; very preliminary implementation!
(is_attr): Likewise.
(remove_attr): Likewise.
-rw-r--r-- | mutex.c | 98 |
1 files changed, 98 insertions, 0 deletions
@@ -7,6 +7,104 @@ #include "pthread.h" +static int +insert_attr(pthread_mutexattr_t *attr) +{ + /* Add this attribute object to a list. */ + + /* FIXME: implement using some dynamic scheme. */ + return 0; +} + +static int +is_attr(pthread_mutexattr_t *attr) +{ + /* Return 0 if present, 1 otherwise. */ + + /* FIXME: implement. For now, pretend the attribute is always okay, unless + it is NULL. */ + + return (attr == NULL) ? 1 : 0; +} + +static int +remove_attr(pthread_mutexattr_t *attr) +{ + /* Remove this attribute object from the list. */ + + /* FIXME: implement. */ + return 0; +} + +int +pthread_mutexattr_init(pthread_mutexattr_t *attr) +{ + if (attr == NULL) + { + /* This is disallowed. */ + return EINVAL; + } + + attr->ptr = malloc(sizeof(_pthread_mutexattr_t)); + if (attr->ptr == NULL) + { + return ENOMEM; + } + + (_pthread_mutexattr_t *) (attr->ptr).proc_shared = PTHREAD_PROCESS_PRIVATE; + + return 0; +} + +int +pthread_mutexattr_destroy(pthread_mutexattr_t *attr) +{ + if (is_attr(attr) != 0) + { + return EINVAL; + } + else + { + free(attr->ptr); + return 0; + } +} + +int +pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int process_shared) +{ + /* Ensure the value for this attribute is within the legal range. */ + if ((process_shared != PTHREAD_PROCESS_PRIVATE) || + (process_shared != PTHREAD_PROCESS_SHARED)) + { + return EINVAL; + } + + /* Ensure attr points to a valid attribute object. */ + if (is_attr(attr) != 0) + { + return EINVAL; + } + + /* Everything is okay. */ + (_pthread_mutexattr_t *) (attr->ptr)->proc_shared = process_shared; + return 0; +} + +int +pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr, + int *process_shared) +{ + if (is_attr(attr) != 0) + { + return EINVAL; + } + + /* Everything is okay. */ + *process_shared = (_pthread_mutexattr_t *) (attr->ptr)->proc_shared; + return 0; +} + int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr, int protocol) |