genode/repos/libports/src/lib/libc/semaphore.cc

110 lines
1.6 KiB
C++

/*
* \brief POSIX semaphore implementation
* \author Christian Prochaska
* \date 2012-03-12
*
*/
/*
* Copyright (C) 2012-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
/* Genode includes */
#include <base/log.h>
#include <base/semaphore.h>
#include <semaphore.h>
/* libc includes */
#include <libc/allocator.h>
using namespace Genode;
extern "C" {
/*
* This class is named 'struct sem' because the 'sem_t' type is
* defined as 'struct sem*' in 'semaphore.h'
*/
struct sem : Semaphore
{
sem(int value) : Semaphore(value) { }
};
int sem_close(sem_t *)
{
warning(__func__, " not implemented");
return -1;
}
int sem_destroy(sem_t *sem)
{
Libc::Allocator alloc { };
destroy(alloc, *sem);
return 0;
}
int sem_getvalue(sem_t * __restrict sem, int * __restrict sval)
{
*sval = (*sem)->cnt();
return 0;
}
int sem_init(sem_t *sem, int pshared, unsigned int value)
{
Libc::Allocator alloc { };
*sem = new (alloc) struct sem(value);
return 0;
}
sem_t *sem_open(const char *, int, ...)
{
warning(__func__, " not implemented");
return 0;
}
int sem_post(sem_t *sem)
{
(*sem)->up();
return 0;
}
int sem_timedwait(sem_t * __restrict, const struct timespec * __restrict)
{
warning(__func__, " not implemented");
return -1;
}
int sem_trywait(sem_t *)
{
warning(__func__, " not implemented");
return -1;
}
int sem_unlink(const char *)
{
warning(__func__, " not implemented");
return -1;
}
int sem_wait(sem_t *sem)
{
(*sem)->down();
return 0;
}
}