static struct {
int (*reader_any_init)(struct reader_any *reader, log_id_t log_id, struct logger *server,
- dlogutil_filter_options_s *filter, struct log_file file, bool monitor, int dumpcount);
+ dlogutil_filter_options_s *filter, struct log_file file, bool monitor, bool is_dumping);
char logger_devices[LOG_ID_MAX][MAX_CONF_VAL_LEN];
int logger_device_throttling[LOG_ID_MAX];
} g_backend = {
int reader_is_bufferable(const struct reader_pipe *reader)
{
assert(reader);
- return reader->buf_ptr && reader->common.file.path != NULL;
+ return reader->buf_ptr && reader->file.path != NULL;
}
int reader_ms_since(const struct reader_pipe *reader, struct timespec *ts)
if (!log_should_print_line(reader->common.filter, dlogutil_entry))
return 0;
- if (reader->common.file.path) {
- logfile_write_with_rotation(dlogutil_entry, &reader->common.file, reader->buf_ptr->sort_by);
+ if (reader->file.path) {
+ logfile_write_with_rotation(dlogutil_entry, &reader->file, reader->buf_ptr->sort_by);
return 0;
}
if (!strlen(tag))
return 0;
- int r = write(reader->common.file.path ? reader->common.file.fd : reader->common.fd_entity_sink.fd, dlogutil_entry, dlogutil_entry->len);
+ int r = write(reader->file.path ? reader->file.fd : reader->common.fd_entity_sink.fd, dlogutil_entry, dlogutil_entry->len);
if (r < 0) {
if (errno != EAGAIN)
return 1;
r = 0;
}
- reader->common.file.size += r;
+ reader->file.size += r;
if (r < dlogutil_entry->len) {
reader->partial_log_size = dlogutil_entry->len - r;
memcpy(reader->partial_log, ((char *)dlogutil_entry) + r, reader->partial_log_size);
return -1;
- } else if (logfile_rotate_needed(&reader->common.file) > 0) {
- logfile_do_rotate(&reader->common.file);
+ } else if (logfile_rotate_needed(&reader->file) > 0) {
+ logfile_do_rotate(&reader->file);
}
return 0;
}
}
- if (reader->common.dumpcount)
+ if (reader->is_dumping)
ret = 1;
else
ret = -1;
close(reader->fd_entity_sink.fd);
if (reader->fd_entity_source.fd >= 0)
close(reader->fd_entity_source.fd);
- logfile_free(&reader->file);
if (reader->filter)
log_filter_free(reader->filter);
}
return;
reader_deinit_common(&reader->common);
+ logfile_free(&reader->file);
if (reader->log_storage_reader)
log_storage_release_reader(reader->log_storage_reader);
return;
reader_deinit_common(&reader->common);
+ logfile_free(&reader->file);
free(reader);
}
if (!log_should_print_line(reader->common.filter, &entry.header))
continue;
- logfile_write_with_rotation(&entry.header, &reader->common.file, DLOGUTIL_SORT_SENT_REAL);
+ logfile_write_with_rotation(&entry.header, &reader->file, DLOGUTIL_SORT_SENT_REAL);
}
}
assert(buffer);
reader->log_storage_reader = log_storage_new_reader(buffer->log_storage,
- reader->common.dumpcount, reader->common.monitor, reader_notify_losing_log, reader);
+ reader->is_dumping, reader->monitor, reader_notify_losing_log, reader);
if (!reader->log_storage_reader)
return -ENOMEM;
}
static struct reader_pipe *reader_pipe_init(dlogutil_filter_options_s *filter, struct log_file file, struct timespec ts,
- bool monitor, int dumpcount)
+ bool monitor, bool is_dumping)
{
struct reader_pipe *ret = calloc(1, sizeof(*ret));
if (!ret)
return NULL;
- ret->common = (struct reader) {
- .filter = filter,
- .file = file,
- .monitor = monitor,
- .dumpcount = dumpcount,
- };
+ ret->common.filter = filter;
+ ret->monitor = monitor;
+ ret->is_dumping = is_dumping;
+ ret->file = file;
ret->buf_ptr = NULL;
ret->log_storage_reader = NULL;
ret->last_read_time = ts;
return ret;
}
-static struct reader_logger *reader_logger_init(dlogutil_filter_options_s *filter, struct log_file file, struct timespec ts,
- bool monitor, int dumpcount)
+static struct reader_logger *reader_logger_init(dlogutil_filter_options_s *filter, struct log_file file)
{
struct reader_logger *ret = calloc(1, sizeof(*ret));
if (!ret)
return NULL;
- ret->common = (struct reader) {
- .filter = filter,
- .file = file,
- .monitor = monitor,
- .dumpcount = dumpcount,
- };
+ ret->common.filter = filter;
+ ret->file = file;
ret->buf_id = LOG_ID_INVALID;
return ret;
}
static int reader_any_init_for_pipe(struct reader_any *reader, log_id_t buf_id, struct logger *server,
- dlogutil_filter_options_s *filter, struct log_file file, bool monitor, int dumpcount)
+ dlogutil_filter_options_s *filter, struct log_file file, bool monitor, bool is_dumping)
{
assert(reader);
assert(buf_id > LOG_ID_INVALID);
assert(server);
assert(filter);
- __attribute__((cleanup(reader_pipe_cleanup))) struct reader_pipe *ret = reader_pipe_init(filter, file, server->time.mono, monitor, dumpcount);
+ __attribute__((cleanup(reader_pipe_cleanup))) struct reader_pipe *ret = reader_pipe_init(filter, file, server->time.mono, monitor, is_dumping);
if (!ret)
return -ENOMEM;
}
static int reader_pipe_init_with_writer(struct reader_pipe **reader, struct writer *writer, struct logger *server,
- dlogutil_filter_options_s *filter, struct log_file file, bool monitor, int dumpcount)
+ dlogutil_filter_options_s *filter, struct log_file file, bool monitor, bool is_dumping)
{
assert(reader);
assert(writer);
assert(server);
assert(filter);
- __attribute__((cleanup(reader_pipe_cleanup))) struct reader_pipe *ret = reader_pipe_init(filter, file, server->time.mono, monitor, dumpcount);
+ __attribute__((cleanup(reader_pipe_cleanup))) struct reader_pipe *ret = reader_pipe_init(filter, file, server->time.mono, monitor, is_dumping);
if (!ret)
return -ENOMEM;
}
static int reader_any_init_for_logger(struct reader_any *reader, log_id_t buf_id, struct logger *server,
- dlogutil_filter_options_s *filter, struct log_file file, bool monitor, int dumpcount)
+ dlogutil_filter_options_s *filter, struct log_file file, bool monitor, bool is_dumping)
{
assert(reader);
assert(buf_id > LOG_ID_INVALID);
assert(filter);
if (buf_id == LOG_ID_KMSG || buf_id == LOG_ID_SYSLOG)
- return reader_any_init_for_pipe(reader, buf_id, server, filter, file, monitor, dumpcount);
+ return reader_any_init_for_pipe(reader, buf_id, server, filter, file, monitor, is_dumping);
- __attribute__((cleanup(reader_logger_cleanup))) struct reader_logger *ret = reader_logger_init(filter, file, server->time.mono, monitor, dumpcount);
+ __attribute__((cleanup(reader_logger_cleanup))) struct reader_logger *ret = reader_logger_init(filter, file);
if (!ret)
return -ENOMEM;
struct log_file file;
logfile_init(&file);
- bool dumpcount = false;
+ bool is_dumping = false;
bool monitor = false;
log_id_t buf_id = LOG_ID_INVALID;
break;
case 'd':
case 't':
- dumpcount = true;
+ is_dumping = true;
break;
case 'm':
monitor = true;
}
// dump + monitor = continuous
- if (monitor && dumpcount) {
- dumpcount = false;
+ if (monitor && is_dumping) {
+ is_dumping = false;
monitor = false;
}
if (wr && wr->buf_ptr) {
struct reader_pipe *pipe = NULL;
- retval = reader_pipe_init_with_writer(&pipe, wr, server, filter, file, monitor, dumpcount);
+ retval = reader_pipe_init_with_writer(&pipe, wr, server, filter, file, monitor, is_dumping);
reader.which = READER_ANY_PIPE;
reader.pipe_inner = pipe;
}
else if (buf_id != LOG_ID_INVALID)
- retval = g_backend.reader_any_init(&reader, buf_id, server, filter, file, monitor, dumpcount);
+ retval = g_backend.reader_any_init(&reader, buf_id, server, filter, file, monitor, is_dumping);
else
retval = -EINVAL;
if (retval != 0)
if (wr) {
assert(reader.which == READER_ANY_PIPE);
int write_fd = -1, read_fd = -1;
- retval = create_fifo_fds(server, wr->fd_entity.fd, &write_fd, &read_fd, reader.pipe_inner->common.dumpcount);
+ retval = create_fifo_fds(server, wr->fd_entity.fd, &write_fd, &read_fd, reader.pipe_inner->is_dumping);
if (retval < 0)
goto cleanup;