Viewing: semaphore.c
📄 semaphore.c (Read Only) ⬅ To go back
#include "semaphore.h"
#include "syscall.h"
#include "errno.h"

sem_t* sem_open(const char* name, int oflag, ...) {
    int ret = _syscall2(SYS_SEM_OPEN, (int)name, oflag);
    if (ret < 0 && ret > -4096) {
        errno = -ret;
        return SEM_FAILED;
    }
    return (sem_t*)(long)ret;
}

int sem_close(sem_t* sem) {
    return __syscall_ret(_syscall1(SYS_SEM_CLOSE, (int)sem));
}

int sem_wait(sem_t* sem) {
    return __syscall_ret(_syscall1(SYS_SEM_WAIT, (int)sem));
}

int sem_trywait(sem_t* sem) {
    return __syscall_ret(_syscall1(SYS_SEM_WAIT, (int)sem));
}

int sem_post(sem_t* sem) {
    return __syscall_ret(_syscall1(SYS_SEM_POST, (int)sem));
}

int sem_unlink(const char* name) {
    return __syscall_ret(_syscall1(SYS_SEM_UNLINK, (int)name));
}

int sem_getvalue(sem_t* sem, int* sval) {
    return __syscall_ret(_syscall2(SYS_SEM_GETVALUE, (int)sem, (int)sval));
}

int sem_init(sem_t* sem, int pshared, unsigned int value) {
    (void)pshared;
    if (sem) sem->__val = (int)value;
    return 0;
}

int sem_destroy(sem_t* sem) {
    (void)sem;
    return 0;
}