static void __log_close(void) { if (log_daemon) { log_flush(); closelog(); free_logarea(); } }
void log_close (void) { if (is_daemon) { closelog(); free_logarea(); } return; }
static int logarea_init (int size) { int shmid; logdbg(stderr,"enter logarea_init\n"); if ((shmid = shmget(IPC_PRIVATE, sizeof(struct logarea), 0644 | IPC_CREAT | IPC_EXCL)) == -1) { syslog(LOG_ERR, "shmget logarea failed %d", errno); return 1; } la = shmat(shmid, NULL, 0); if (!la) { syslog(LOG_ERR, "shmat logarea failed %d", errno); shmctl(shmid, IPC_RMID, NULL); return 1; } la->shmid = shmid; la->start = NULL; la->buff = NULL; la->semid = -1; if (size < MAX_MSG_SIZE) size = DEFAULT_AREA_SIZE; if ((shmid = shmget(IPC_PRIVATE, size, 0644 | IPC_CREAT | IPC_EXCL)) == -1) { syslog(LOG_ERR, "shmget msg failed %d", errno); free_logarea(); return 1; } la->shmid_msg = shmid; la->start = shmat(la->shmid_msg, NULL, 0); if (!la->start) { syslog(LOG_ERR, "shmat msg failed %d", errno); free_logarea(); return 1; } memset(la->start, 0, size); la->empty = 1; la->end = la->start + size; la->head = la->start; la->tail = la->start; if ((shmid = shmget(IPC_PRIVATE, MAX_MSG_SIZE + sizeof(struct logmsg), 0644 | IPC_CREAT | IPC_EXCL)) == -1) { syslog(LOG_ERR, "shmget logmsg failed %d", errno); free_logarea(); return 1; } la->buff = shmat(shmid, NULL, 0); if (!la->buff) { syslog(LOG_ERR, "shmat logmsgfailed %d", errno); free_logarea(); return 1; } if ((la->semid = semget(SEMKEY, 1, 0600 | IPC_CREAT)) < 0) { syslog(LOG_ERR, "semget failed %d", errno); free_logarea(); return 1; } la->semarg.val=1; if (semctl(la->semid, 0, SETVAL, la->semarg) < 0) { syslog(LOG_ERR, "semctl failed %d", errno); free_logarea(); return 1; } la->shmid_buff = shmid; la->ops[0].sem_num = 0; la->ops[0].sem_flg = 0; return 0; }