- int32_t size; // size of data written
- int32_t head; // start of message list
- int32_t tail; // end of message list
- char data[1]; // data/messages
-} *buf; // shared memory pointer
-
+ int32_t size; // size of data written
+ int32_t head; // start of message list
+ int32_t tail; // end of message list
+ char data[1]; // data/messages
+} *buf; // shared memory pointer
// Semaphore operation structures
static struct sembuf SMrup[1] = {{0, -1, IPC_NOWAIT | SEM_UNDO}}; // set SMrup
static struct sembuf SMrdn[2] = {{1, 0}, {0, +1, SEM_UNDO}}; // set SMrdn
// Semaphore operation structures
static struct sembuf SMrup[1] = {{0, -1, IPC_NOWAIT | SEM_UNDO}}; // set SMrup
static struct sembuf SMrdn[2] = {{1, 0}, {0, +1, SEM_UNDO}}; // set SMrdn
static void error_exit(const char *str) ATTRIBUTE_NORETURN;
static void error_exit(const char *str)
{
//release all acquired resources
static void error_exit(const char *str) ATTRIBUTE_NORETURN;
static void error_exit(const char *str)
{
//release all acquired resources
-/*
- * sem_down - down()'s a semaphore
- */
-static void sem_down(int semid)
-{
- if (semop(semid, SMrdn, 2) == -1)
- error_exit("semop[SMrdn]");
-}
-
-static void interrupted(int sig)
+static void interrupted(int sig ATTRIBUTE_UNUSED)
- int follow = 1;
-
- if (argc != 2 || argv[1][0]!='-' || argv[1][1]!='f' ) {
- follow = 0;
- /* no options, no getopt */
- if (argc > 1)
- bb_show_usage();
- }
+ int log_semid; /* ipc semaphore id */
+ int log_shmid; /* ipc shared memory id */
+ smallint follow = getopt32(argc, argv, "f");
// Attach shared memory to our char*
buf = shmat(log_shmid, NULL, SHM_RDONLY);
if (buf == NULL)
// Attach shared memory to our char*
buf = shmat(log_shmid, NULL, SHM_RDONLY);
if (buf == NULL)
- printf("head:%i cur:%d tail:%i size:%i\n", buf->head, cur, buf->tail, buf->size);
+ printf("head:%i cur:%d tail:%i size:%i\n",
+ buf->head, cur, buf->tail, buf->size);
- if (buf->tail >= cur) {
- memcpy(buf_data, buf->data + cur, log_len);
- } else {
- memcpy(buf_data, buf->data + cur, buf->size - cur);
+ if (buf->tail >= cur)
+ j = log_len;
+ else
+ j = buf->size - cur;
+ memcpy(buf_data, buf->data + cur, j);
+
+ if (buf->tail < cur)
for (j = 0; j < log_len; j += strlen(buf_data+j) + 1) {
fputs(buf_data + j, stdout);
}
free(buf_data);
#endif
for (j = 0; j < log_len; j += strlen(buf_data+j) + 1) {
fputs(buf_data + j, stdout);
}
free(buf_data);
#endif