/* Copyright (C) 1999 Beau Kuiper
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "ftpd.h"
void shmem_finish(int shmemnum)
{
struct shmid_ds buffer;
if (shmemnum != -1)
{
if (shmctl(shmemnum, IPC_RMID, &buffer) == -1);
/* close(shmem_lockfd); */
}
}
void *shmem_get(char *ipcfile, int size, int *shmemnum, int *isnew, int *lockfd)
{
key_t ipckey = ftok(ipcfile, '/');
void *shmemarea;
*isnew = TRUE;
*shmemnum = shmget(ipckey, size,
IPC_CREAT | IPC_EXCL | 0600);
if (*shmemnum == -1)
{
*isnew = FALSE;
*shmemnum = shmget(ipckey, size,
IPC_CREAT |/* IPC_EXCL |*/ 0600);
}
if (*shmemnum == -1)
ERRORMSGFATAL(strerror(errno));
shmemarea = shmat(*shmemnum, NULL, 0);
/* get semaphores. Using the config file so others can join in (we use file locks for portability, simplicity
and usability. */
*lockfd = open(ipcfile, O_RDWR);
if (*lockfd == -1)
ERRORMSGFATAL(strerror(errno));
return(shmemarea);
}
syntax highlighted by Code2HTML, v. 0.9.1