diff --git a/headers/posix/unistd.h b/headers/posix/unistd.h index 47f1f7744a..31823f74f3 100644 --- a/headers/posix/unistd.h +++ b/headers/posix/unistd.h @@ -28,7 +28,14 @@ #define F_TEST 3 /* test a section for locks by other processes */ /* POSIX version support */ -#define _POSIX_VERSION (199009L) +#define _POSIX_VERSION (199009L) /* TODO: Update! */ + +#define _POSIX_CHOWN_RESTRICTED 1 +#define _POSIX_JOB_CONTROL 1 +#define _POSIX_NO_TRUNC 0 +#define _POSIX_SAVED_IDS 1 +#define _POSIX_VDISABLE ((char)-2) /* TODO: Check this! */ +#define _POSIX_SEMAPHORES (200112L) /* pathconf() constants */ #define _PC_CHOWN_RESTRICTED 1 @@ -40,11 +47,6 @@ #define _PC_PIPE_BUF 7 #define _PC_VDISABLE 8 #define _PC_LINK_MAX 25 -#define _POSIX_CHOWN_RESTRICTED 9 -#define _POSIX_JOB_CONTROL 10 -#define _POSIX_NO_TRUNC 11 -#define _POSIX_SAVED_IDS 12 -#define _POSIX_VDISABLE ((cc_t) - 2) /* sysconf() constants */ #define _SC_ARG_MAX 15 @@ -61,6 +63,9 @@ #define _SC_GETPW_R_SIZE_MAX 26 #define _SC_PAGE_SIZE 27 #define _SC_PAGESIZE _SC_PAGE_SIZE +#define _SC_SEM_NSEMS_MAX 28 +#define _SC_SEM_VALUE_MAX 29 +#define _SC_SEMAPHORES 30 /* lseek() constants */ #ifndef SEEK_SET diff --git a/headers/private/kernel/posix/realtime_sem.h b/headers/private/kernel/posix/realtime_sem.h index 04a5dd5033..c657d253dd 100644 --- a/headers/private/kernel/posix/realtime_sem.h +++ b/headers/private/kernel/posix/realtime_sem.h @@ -15,6 +15,11 @@ struct realtime_sem_context; +#define MAX_POSIX_SEMS_PER_TEAM 128 +#define MAX_POSIX_SEMS 1024 +#define MAX_POSIX_SEM_VALUE INT_MAX + + __BEGIN_DECLS void realtime_sem_init(); @@ -22,7 +27,7 @@ void delete_realtime_sem_context(struct realtime_sem_context* context); struct realtime_sem_context* clone_realtime_sem_context( struct realtime_sem_context* context); -status_t _user_realtime_sem_open(const char* name, int openFlags, +status_t _user_realtime_sem_open(const char* name, int openFlagsOrShared, mode_t mode, uint32 semCount, sem_t* userSem, sem_t** _usedUserSem); status_t _user_realtime_sem_close(sem_id semID, sem_t** _deleteUserSem); diff --git a/src/system/libroot/posix/unistd/conf.c b/src/system/libroot/posix/unistd/conf.c index a64563efe4..ac55ee292a 100644 --- a/src/system/libroot/posix/unistd/conf.c +++ b/src/system/libroot/posix/unistd/conf.c @@ -15,6 +15,7 @@ #include #include +#include #include @@ -61,6 +62,12 @@ sysconf(int name) return MAX_PASSWD_BUFFER_SIZE; case _SC_PAGE_SIZE: return B_PAGE_SIZE; + case _SC_SEM_NSEMS_MAX: + return MAX_POSIX_SEMS; + case _SC_SEM_VALUE_MAX: + return MAX_POSIX_SEM_VALUE; + case _SC_SEMAPHORES: + return _POSIX_SEMAPHORES; } return -1; @@ -71,10 +78,8 @@ long fpathconf(int fd, int name) { switch (name) { - // ToDo: out of what stupidity have those been defined differently? case _PC_CHOWN_RESTRICTED: - case _POSIX_CHOWN_RESTRICTED: - return 1; + return _POSIX_CHOWN_RESTRICTED; case _PC_MAX_CANON: return MAX_CANON; @@ -86,8 +91,7 @@ fpathconf(int fd, int name) return NAME_MAX; case _PC_NO_TRUNC: - case _POSIX_NO_TRUNC: - return 0; + return _POSIX_NO_TRUNC; case _PC_PATH_MAX: return PATH_MAX; @@ -98,10 +102,8 @@ fpathconf(int fd, int name) case _PC_LINK_MAX: return LINK_MAX; - // _PC_VDISABLE - // _POSIX_VDISABLE - // _POSIX_JOB_CONTROL - // _POSIX_SAVED_IDS + case _PC_VDISABLE: + return _POSIX_VDISABLE; } return -1;