summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/zix/common.h5
-rw-r--r--src/sem.c13
-rw-r--r--src/status.c6
3 files changed, 17 insertions, 7 deletions
diff --git a/include/zix/common.h b/include/zix/common.h
index a097edd..59a61ac 100644
--- a/include/zix/common.h
+++ b/include/zix/common.h
@@ -42,6 +42,11 @@ ZIX_CONST_API
ZixStatus
zix_errno_status(int e);
+/// Return success if `r` is non-zero, or `errno` as a status code otherwise
+ZIX_PURE_API
+ZixStatus
+zix_errno_status_if(int r);
+
/// Function for comparing two elements
typedef int (*ZixComparator)(const void* a,
const void* b,
diff --git a/src/sem.c b/src/sem.c
index 325eaa4..d9aa6d1 100644
--- a/src/sem.c
+++ b/src/sem.c
@@ -136,20 +136,19 @@ zix_sem_timed_wait(ZixSem* sem,
ZixStatus
zix_sem_init(ZixSem* sem, unsigned initial)
{
- return sem_init(&sem->sem, 0, initial) ? zix_errno_status(errno)
- : ZIX_STATUS_SUCCESS;
+ return zix_errno_status_if(sem_init(&sem->sem, 0, initial));
}
ZixStatus
zix_sem_destroy(ZixSem* sem)
{
- return sem_destroy(&sem->sem) ? zix_errno_status(errno) : ZIX_STATUS_SUCCESS;
+ return zix_errno_status_if(sem_destroy(&sem->sem));
}
ZixStatus
zix_sem_post(ZixSem* sem)
{
- return sem_post(&sem->sem) ? zix_errno_status(errno) : ZIX_STATUS_SUCCESS;
+ return zix_errno_status_if(sem_post(&sem->sem));
}
ZixStatus
@@ -160,7 +159,7 @@ zix_sem_wait(ZixSem* sem)
// Interrupted, try again
}
- return r ? zix_errno_status(errno) : ZIX_STATUS_SUCCESS;
+ return zix_errno_status_if(r);
}
ZixStatus
@@ -171,7 +170,7 @@ zix_sem_try_wait(ZixSem* sem)
// Interrupted, try again
}
- return r ? zix_errno_status(errno) : ZIX_STATUS_SUCCESS;
+ return zix_errno_status_if(r);
}
ZixStatus
@@ -195,7 +194,7 @@ zix_sem_timed_wait(ZixSem* sem,
}
}
- return r ? zix_errno_status(errno) : ZIX_STATUS_SUCCESS;
+ return zix_errno_status_if(r);
# endif
}
diff --git a/src/status.c b/src/status.c
index 380d370..e6fbec8 100644
--- a/src/status.c
+++ b/src/status.c
@@ -38,6 +38,12 @@ zix_strerror(const ZixStatus status)
}
ZixStatus
+zix_errno_status_if(const int r)
+{
+ return r ? zix_errno_status(errno) : ZIX_STATUS_SUCCESS;
+}
+
+ZixStatus
zix_errno_status(const int e)
{
switch (e) {