aboutsummaryrefslogtreecommitdiff
path: root/src/ui_ipc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui_ipc.c')
-rw-r--r--src/ui_ipc.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/ui_ipc.c b/src/ui_ipc.c
index 9eac79e..cf137e7 100644
--- a/src/ui_ipc.c
+++ b/src/ui_ipc.c
@@ -1,12 +1,13 @@
#include <stdio.h>
#include <stdlib.h>
-#include <strings.h>
+#include <string.h>
#ifdef SEM_TIMEDWAIT
#include <time.h>
#endif
#include <semaphore.h>
#include <mqueue.h>
#include <sys/stat.h>
+#include <alloca.h>
#include <errno.h>
#include "ui_ipc.h"
@@ -35,14 +36,14 @@ ui_ipc_init(int is_master)
sp_oflags = O_CREAT | O_EXCL;
mq_oflags = O_NONBLOCK | O_CREAT | O_EXCL;
crt_flags = S_IRUSR | S_IWUSR;
- JMP_IF( msqs[MQ_PW] = mq_open(MSQ_PWD, mq_oflags | O_RDONLY, crt_flags, &m_attr), (mqd_t)-1, error );
- JMP_IF( msqs[MQ_IF] = mq_open(MSQ_INF, mq_oflags | O_WRONLY, crt_flags, &m_attr), (mqd_t)-1, error );
+ JMP_IF( msqs[MQ_PW] = mq_open(MSQ_PWD, mq_oflags | O_RDONLY, crt_flags, &m_attr), (mqd_t)-1, error );
+ JMP_IF( msqs[MQ_IF] = mq_open(MSQ_INF, mq_oflags | O_WRONLY, crt_flags, &m_attr), (mqd_t)-1, error );
} else {
sp_oflags = 0;
mq_oflags = 0;
crt_flags = 0;
- JMP_IF( msqs[MQ_PW] = mq_open(MSQ_PWD, mq_oflags | O_WRONLY, crt_flags, &m_attr), (mqd_t)-1, error );
- JMP_IF( msqs[MQ_IF] = mq_open(MSQ_INF, mq_oflags | O_RDONLY, crt_flags, &m_attr), (mqd_t)-1, error );
+ JMP_IF( msqs[MQ_PW] = mq_open(MSQ_PWD, mq_oflags | O_WRONLY, crt_flags, &m_attr), (mqd_t)-1, error );
+ JMP_IF( msqs[MQ_IF] = mq_open(MSQ_INF, mq_oflags | O_RDONLY, crt_flags, &m_attr), (mqd_t)-1, error );
}
JMP_IF( sems[SEM_UI] = sem_open(SEM_GUI, sp_oflags, crt_flags, 0), SEM_FAILED, error );
JMP_IF( sems[SEM_IN] = sem_open(SEM_INP, sp_oflags, crt_flags, 0), SEM_FAILED, error );
@@ -117,14 +118,25 @@ ui_ipc_semtimedwait(enum UI_IPC_SEM e_sp, int timeout)
#endif
int
-ui_ipc_msgsend(enum UI_IPC_MSQ e_mq, const char *msg_ptr, size_t msg_len)
+ui_ipc_msgsend(enum UI_IPC_MSQ e_mq, const char *msg_ptr)
{
- return ( mq_send(msqs[e_mq], msg_ptr, msg_len, 0) );
+ char *tmp = alloca(IPC_MQSIZ);
+ memset(tmp, '\0', IPC_MQSIZ);
+ strncpy(tmp, msg_ptr, IPC_MQSIZ);
+ return ( mq_send(msqs[e_mq], tmp, IPC_MQSIZ, 0) );
}
ssize_t
-ui_ipc_msgrecv(enum UI_IPC_MSQ e_mq, char *msg_ptr, size_t msg_len)
+ui_ipc_msgrecv(enum UI_IPC_MSQ e_mq, char *msg_ptr)
{
- return ( mq_receive(msqs[e_mq], msg_ptr, msg_len, NULL) );
+ return mq_receive(msqs[e_mq], msg_ptr, IPC_MQSIZ, NULL);
}
+long
+ui_ipc_msgcount(enum UI_IPC_MSQ e_mq)
+{
+ struct mq_attr m_attr;
+ bzero(&m_attr, sizeof(struct mq_attr));
+ if (mq_getattr(msqs[e_mq], &m_attr) != 0) return -1;
+ return m_attr.mq_curmsgs;
+}