-/* $Cambridge: exim/src/exim_monitor/em_main.c,v 1.4 2006/02/07 11:18:59 ph10 Exp $ */
-
/*************************************************
* Exim Monitor *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 2006 */
+/* Copyright (c) University of Cambridge 1995 - 2018 */
+/* Copyright (c) The Exim Maintainers 2021 */
/* See the file NOTICE for conditions of use and distribution. */
*/
void
-log_write(unsigned int selector, int flags, char *format, ...)
+log_write(unsigned int selector, int flags, const char *format, ...)
{
va_list ap;
va_start(ap, format);
vfprintf(stderr, format, ap);
fprintf(stderr, "\n");
va_end(ap);
-selector = selector; /* Keep picky compilers happy */
-flags = flags;
}
void updateAction(Widget w, XtPointer client_data, XtPointer call_data)
{
-w = w; /* Keep picky compilers happy */
-client_data = client_data;
-call_data = call_data;
scan_spool_input(TRUE);
queue_display();
tick_queue_accumulator = 0;
void hideAction(Widget w, XtPointer client_data, XtPointer call_data)
{
-w = w; /* Keep picky compilers happy */
-client_data = client_data;
-call_data = call_data;
actioned_message[0] = 0;
dialog_ref_widget = w;
dialog_action = da_hide;
{
skip_item *sk = queue_skip;
-w = w; /* Keep picky compilers happy */
-client_data = client_data;
-call_data = call_data;
-
-while (sk != NULL)
+while (sk)
{
skip_item *next = sk->next;
store_free(sk);
void quitAction(Widget w, XtPointer client_data, XtPointer call_data)
{
-w = w; /* Keep picky compilers happy */
-client_data = client_data;
-call_data = call_data;
exit(0);
}
XWindowAttributes a;
Window w = XtWindow(toplevel_widget);
-button = button; /* Keep picky compilers happy */
-client_data = client_data;
-call_data = call_data;
-
/* Get the position and size of the top level widget. */
sizepos_args[0].value = (XtArgVal)(&width);
tick_stripchart_accumulator += tick_interval;
read_log();
-pt = pt; /* Keep picky compilers happy */
-i = i;
-
/* If we have passed the queue update time, we must do a full
scan of the queue, checking for new arrivals, etc. This will
as a by-product set the count of items for use by the stripchart
* Initialize *
*************************************************/
-int main(int argc, char **argv)
+int
+main(int argc, char **argv)
{
int i;
struct stat statdata;
constructing file names and things. This call will initialize
the store_get() function. */
-big_buffer_size = 1024;
-big_buffer = store_get(big_buffer_size);
+store_init();
+big_buffer = store_get(big_buffer_size, GET_UNTAINTED);
/* Set up the version string and date and output them */
/* Get the buffer for storing the string for the log display. */
-log_display_buffer = (uschar *)store_malloc(log_buffer_size);
+log_display_buffer = US store_malloc(log_buffer_size);
log_display_buffer[0] = 0;
/* Initialize the data structures for the stripcharts */
only, and we can't tail the log. If not, open the log file and position to the
end of it. Before doing so, we have to detect whether the log files are
datestamped, and if so, sort out the name. The string in log_file already has
-%s replaced by "main"; if datestamping is occurring, %D will be present. In
-fact, we don't need to test explicitly - just process the string with
+%s replaced by "main"; if datestamping is occurring, %D or %M will be present.
+In fact, we don't need to test explicitly - just process the string with
string_format.
Once opened, save the file's inode so that we can detect when the file is
if (log_file[0] != 0)
{
- (void)string_format(log_file_open, sizeof(log_file_open), CS log_file);
+ /* Do *not* use "%s" here, we need the %D datestamp in the log_file to
+ be expanded! */
+ (void)string_format(log_file_open, sizeof(log_file_open), CS log_file, NULL);
log_datestamping = string_datestamp_offset >= 0;
LOG = fopen(CS log_file_open, "r");
{
fseek(LOG, 0, SEEK_END);
log_position = ftell(LOG);
- fstat(fileno(LOG), &statdata);
- log_inode = statdata.st_ino;
+ if (fstat(fileno(LOG), &statdata))
+ {
+ perror("log file fstat");
+ fclose(LOG);
+ LOG=NULL;
+ }
+ else
+ log_inode = statdata.st_ino;
}
}
else