Partially initialize message queue

This commit is contained in:
Alex Kotov 2020-12-13 16:25:53 +05:00
parent 0d0c2333fb
commit 2d609d4783
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
3 changed files with 19 additions and 0 deletions

View File

@ -32,9 +32,12 @@ AC_FUNC_MMAP
AC_CHECK_HEADER_STDBOOL
AC_CHECK_HEADERS([stddef.h])
AC_CHECK_HEADERS([stdlib.h])
AC_CHECK_HEADERS([string.h])
AC_CHECK_FUNCS([ftruncate])
AC_CHECK_FUNCS([munmap])
AC_CHECK_FUNCS([strcpy])
AC_CHECK_FUNCS([strlen])
AC_SEARCH_LIBS([shm_open], [rt])
AC_SEARCH_LIBS([shm_unlink], [rt])

View File

@ -5,6 +5,7 @@
#include <stddef.h>
#define SHMEMQ_NAME_SIZE_MAX ((size_t)255)
#define SHMEMQ_NAME_SLEN_MAX (SHMEMQ_NAME_SIZE_MAX - 1)
#define SHMEMQ_FRAME_SIZE ((size_t)8)

View File

@ -5,6 +5,7 @@
#include <shmemq.h>
#include <stdlib.h>
#include <string.h>
struct Shmemq *shmemq_new(
const char *const name,
@ -35,5 +36,19 @@ enum Shmemq_Error shmemq_init(
const char *const name,
const size_t size
) {
if (strlen(name) > SHMEMQ_NAME_SLEN_MAX || name[0] != '/') {
return SHMEMQ_ERROR_INVALID_NAME;
}
for (const char *chr = &name[1]; *chr; ++chr) {
if (*chr == '/') return SHMEMQ_ERROR_INVALID_NAME;
}
strcpy(shmemq->name, name);
shmemq->is_consumer = size == 0;
shmemq->buffer = NULL;
return SHMEMQ_ERROR_NONE;
}