add size parameter to syslogd -C

Patch by Padraig, resubmitted by Fillod Stephane
This commit is contained in:
Glenn L McGrath 2003-09-26 00:49:05 +00:00
parent 6b0658f5c0
commit a79220db6e

View File

@ -106,8 +106,7 @@ static struct sembuf SMwdn[3] = { {0, 0}, {1, 0}, {1, +1} }; // set SMwdn
static int shmid = -1; // ipc shared memory id static int shmid = -1; // ipc shared memory id
static int s_semid = -1; // ipc semaphore id static int s_semid = -1; // ipc semaphore id
int data_size = 16000; // data size static int data_size = 16000; // default data size
int shm_size = 16000 + sizeof(*buf); // our buffer size
static int circular_logging = FALSE; static int circular_logging = FALSE;
/* /*
@ -149,7 +148,7 @@ void ipcsyslog_cleanup(void)
void ipcsyslog_init(void) void ipcsyslog_init(void)
{ {
if (buf == NULL) { if (buf == NULL) {
if ((shmid = shmget(KEY_ID, shm_size, IPC_CREAT | 1023)) == -1) { if ((shmid = shmget(KEY_ID, data_size, IPC_CREAT | 1023)) == -1) {
bb_perror_msg_and_die("shmget"); bb_perror_msg_and_die("shmget");
} }
@ -157,7 +156,7 @@ void ipcsyslog_init(void)
bb_perror_msg_and_die("shmat"); bb_perror_msg_and_die("shmat");
} }
buf->size = data_size; buf->size = data_size - sizeof(*buf);
buf->head = buf->tail = 0; buf->head = buf->tail = 0;
// we'll trust the OS to set initial semval to 0 (let's hope) // we'll trust the OS to set initial semval to 0 (let's hope)
@ -579,7 +578,7 @@ extern int syslogd_main(int argc, char **argv)
char *p; char *p;
/* do normal option parsing */ /* do normal option parsing */
while ((opt = getopt(argc, argv, "m:nO:R:LC")) > 0) { while ((opt = getopt(argc, argv, "m:nO:R:LC::")) > 0) {
switch (opt) { switch (opt) {
case 'm': case 'm':
MarkInterval = atoi(optarg) * 60; MarkInterval = atoi(optarg) * 60;
@ -605,6 +604,12 @@ extern int syslogd_main(int argc, char **argv)
#endif #endif
#ifdef CONFIG_FEATURE_IPC_SYSLOG #ifdef CONFIG_FEATURE_IPC_SYSLOG
case 'C': case 'C':
if (optarg) {
int buf_size = atoi(optarg);
if (buf_size >= 4) {
data_size = buf_size;
}
}
circular_logging = TRUE; circular_logging = TRUE;
break; break;
#endif #endif