*
* Maintainer: Gennady Feldman <gfeldman@gena01.com> as of Mar 12, 2001
*
- * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
+//usage:#define logread_trivial_usage
+//usage: "[-f]"
+//usage:#define logread_full_usage "\n\n"
+//usage: "Show messages in syslogd's circular buffer\n"
+//usage: "\n -f Output data as log grows"
+
#include "libbb.h"
#include <sys/ipc.h>
#include <sys/sem.h>
struct sembuf SMrup[1]; // {0, -1, IPC_NOWAIT | SEM_UNDO},
struct sembuf SMrdn[2]; // {1, 0}, {0, +1, SEM_UNDO}
struct shbuf_ds *shbuf;
-};
+} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
#define SMrup (G.SMrup)
#define SMrdn (G.SMrdn)
#define shbuf (G.shbuf)
-#define INIT_G() \
- do { \
- memcpy(SMrup, init_sem, sizeof(init_sem)); \
- } while (0)
+#define INIT_G() do { \
+ memcpy(SMrup, init_sem, sizeof(init_sem)); \
+} while (0)
-static void error_exit(const char *str) ATTRIBUTE_NORETURN;
+static void error_exit(const char *str) NORETURN;
static void error_exit(const char *str)
{
//release all acquired resources
error_exit("semop[SMrup]");
}
-static void interrupted(int sig ATTRIBUTE_UNUSED)
+static void interrupted(int sig UNUSED_PARAM)
{
signal(SIGINT, SIG_IGN);
shmdt(shbuf);
}
int logread_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int logread_main(int argc ATTRIBUTE_UNUSED, char **argv)
+int logread_main(int argc UNUSED_PARAM, char **argv)
{
unsigned cur;
int log_semid; /* ipc semaphore id */
} else { /* logread -f */
if (cur == shbuf_tail) {
sem_up(log_semid);
- fflush(stdout);
+ fflush_all();
sleep(1); /* TODO: replace me with a sleep_on */
continue;
}