#include "shm.hh"
#include "_shm.h"
#include "rcs_print.hh"
extern "C" {
#include <stdio.h>
#include <sys/types.h>
#include <stddef.h>
#include <errno.h>
#include <sys/ipc.h>
}
RCS_SHAREDMEM::RCS_SHAREDMEM(key_t key, size_t size, int oflag, int mode)
{
shm = NULL;
addr = NULL;
delete_totally = 0;
create_errno = 0;
created = 0;
if (oflag & RCS_SHAREDMEM_CREATE) {
#ifdef USE_POSIX_SHAREDMEM
shm = rcs_shm_open(key, size, O_CREAT, mode);
#else
shm = rcs_shm_open(key, size, IPC_CREAT, mode);
#endif
if (shm == NULL) {
create_errno = errno;
rcs_print_error("can't create shared memory\n");
return;
}
} else {
shm = rcs_shm_open(key, size, 0);
if (shm == NULL) {
create_errno = errno;
rcs_print_error
("can't attach to shared memory-- is master started?\n");
return;
}
}
create_errno = shm->create_errno;
created = shm->created;
addr = shm->addr;
}
RCS_SHAREDMEM::~RCS_SHAREDMEM()
{
if (shm == NULL) {
return;
} else {
if (delete_totally) {
rcs_shm_delete(shm);
} else {
rcs_shm_close(shm);
}
shm = NULL;
}
}
int
RCS_SHAREDMEM::nattch()
{
if (shm == NULL) {
return -1;
} else {
return rcs_shm_nattch(shm);
}
}
RCS_SHAREDMEM::RCS_SHAREDMEM(RCS_SHAREDMEM & shm)
{
}