src_tests_sort_vector_SOURCES = src/tests/sort_vector.c src/logutil/sort_vector.c
src_tests_sort_vector_CFLAGS = $(check_CFLAGS)
-src_tests_sort_vector_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=log_config_get_int,--wrap=log_should_print_line,--wrap=logfile_write_with_rotation,--wrap=log_entry_is_earlier,--wrap=free
+src_tests_sort_vector_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=log_config_get_int,--wrap=logfile_write_with_rotation,--wrap=log_entry_is_earlier,--wrap=free
src_tests_fd_info_SOURCES = src/tests/fd_info.c src/logutil/fd_info.c
src_tests_fd_info_CFLAGS = $(check_CFLAGS)
-src_tests_fd_info_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=sort_vector_push,--wrap=logfile_write_with_rotation,--wrap=malloc,--wrap=free,--wrap=close,--wrap=extract_timestamp
+src_tests_fd_info_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=sort_vector_push,--wrap=logfile_write_with_rotation,--wrap=malloc,--wrap=free,--wrap=close,--wrap=extract_timestamp,--wrap=log_should_print_line
src_tests_fdi_logger_SOURCES = src/tests/fdi_logger.c src/logutil/fdi_logger.c src/shared/ptrs_list.c src/shared/logcommon.c
src_tests_fdi_logger_CFLAGS = $(check_CFLAGS)
src_tests_log_file_SOURCES = src/tests/log_file.c src/shared/log_file.c
src_tests_log_file_CFLAGS = $(check_CFLAGS)
-src_tests_log_file_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=strdup,--wrap=free,--wrap=memcpy,--wrap=snprintf,--wrap=open,--wrap=fstat,--wrap=rename,--wrap=log_should_print_line,--wrap=extract_timestamp,--wrap=log_print_log_line,--wrap=log_buffer_get_tag
+src_tests_log_file_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=strdup,--wrap=free,--wrap=memcpy,--wrap=snprintf,--wrap=open,--wrap=fstat,--wrap=rename,--wrap=extract_timestamp,--wrap=log_print_log_line,--wrap=log_buffer_get_tag
src_tests_queued_entry_SOURCES = src/tests/queued_entry.c src/shared/queued_entry.c src/shared/queued_entry_timestamp.c src/shared/parsers.c src/shared/translate_syslog.c src/shared/logconfig.c src/shared/logcommon.c
src_tests_queued_entry_CFLAGS = $(check_CFLAGS)
int logfile_open(struct log_file *l_file);
int logfile_rotate_needed(struct log_file *l_file);
void logfile_do_rotate(struct log_file *file);
-int logfile_write_with_rotation(const struct logger_entry *e, struct log_file *file, log_filter *filter, enum sorting_order sort_by);
+int logfile_write_with_rotation(const struct logger_entry *e, struct log_file *file, enum sorting_order sort_by);
#ifdef __cplusplus
}
assert(reader->buf_ptr);
assert(logger_entry);
+ if (!log_should_print_line(reader->filter, logger_entry))
+ return 0;
+
if (reader->file.path) {
- logfile_write_with_rotation(logger_entry, &reader->file, reader->filter, reader->buf_ptr->sort_by);
+ logfile_write_with_rotation(logger_entry, &reader->file, reader->buf_ptr->sort_by);
return 0;
}
if (!strlen(tag))
return 0;
- if (!log_should_print_line(reader->filter, logger_entry))
- return 0;
-
int r = write(reader->file.path ? reader->file.fd : reader->fd_entity.fd, logger_entry, logger_entry->len);
if (r < 0) {
if (errno == EPIPE)
parse_androidlogger_message((struct android_logger_entry *) buffer, &entry.header, r);
add_recv_timestamp(&entry.header);
- logfile_write_with_rotation(&entry.header, &reader->file, reader->filter, SORT_SENT_REAL);
+ if (!log_should_print_line(reader->filter, &entry.header))
+ return 0;
+
+ logfile_write_with_rotation(&entry.header, &reader->file, SORT_SENT_REAL);
}
}
if (!temp)
return -ENOMEM;
+ if (!log_should_print_line(filter, temp)) {
+ free(temp);
+ return 0;
+ }
+
if (IS_VECTOR_SIZE_SORTABLE(logs->size)) {
struct timespec ts;
extract_timestamp(temp, logs->sort_by, &ts);
if (ts.tv_sec > logs->start.tv_sec || (ts.tv_sec == logs->start.tv_sec && ts.tv_nsec > logs->start.tv_nsec))
logs->old_logs_dumped = true;
- const int r = sort_vector_push(logs, temp, l_file, filter);
+ const int r = sort_vector_push(logs, temp, l_file);
if (r)
return r;
} else {
- logfile_write_with_rotation(temp, l_file, filter, logs->sort_by);
+ logfile_write_with_rotation(temp, l_file, logs->sort_by);
free(temp);
}
* @param[in] timeout Sort timeout in ms
* @return 1 if the log was old enough, else 0
*/
-int process_log(const struct logger_entry *e, struct timespec reference_ts, enum sorting_order stamp_type, struct log_file *l_file, log_filter *filter, long timeout)
+int process_log(const struct logger_entry *e, struct timespec reference_ts, enum sorting_order stamp_type, struct log_file *l_file, long timeout)
{
assert(e);
assert(l_file);
}
if (timeout <= (s*1000 + ns/1000000)) {
- logfile_write_with_rotation(e, l_file, filter, stamp_type);
+ logfile_write_with_rotation(e, l_file, stamp_type);
return 1;
} else
return 0;
}
-void flush_logs(struct sort_vector *logs, struct log_file *l_file, log_filter *filter)
+void flush_logs(struct sort_vector *logs, struct log_file *l_file)
{
struct timespec ts;
clock_gettime(get_proper_clock(logs->sort_by), &ts);
- while (!sort_vector_empty(logs) && process_log(sort_vector_back(logs), ts, logs->sort_by, l_file, filter, logs->timeout))
+ while (!sort_vector_empty(logs) && process_log(sort_vector_back(logs), ts, logs->sort_by, l_file, logs->timeout))
sort_vector_pop(logs);
}
goto cleanup;
if (logs->dump == DUMP_CONTINUOUS && (!nfds || (logs->old_logs_dumped == 1 && sort_vector_time_span(logs) > logs->timeout)))
- flush_logs(logs, l_file, filter);
+ flush_logs(logs, l_file);
}
if (put_logs_into_vector(data_fds, fd_count, 0, logs, l_file, filter) < 0)
sort_vector_pop(logs);
logs->timeout = 0;
- flush_logs(logs, l_file, filter);
+ flush_logs(logs, l_file);
cleanup:
free(evs);
* @param[in] logs Log sorting vector
* @return 0 on success, -errno on failure
*/
-int sort_vector_push(struct sort_vector *logs, struct logger_entry *p, struct log_file *l_file, log_filter *filter)
+int sort_vector_push(struct sort_vector *logs, struct logger_entry *p, struct log_file *l_file)
{
assert(logs);
assert(logs->data);
int i;
- if (!log_should_print_line(filter, p)) {
- free(p);
- return -EPERM;
- }
-
if (sort_vector_full(logs)) {
if (logs->dump == DUMP_CONTINUOUS || logs->dump == DUMP_INFINITE)
- logfile_write_with_rotation(sort_vector_back(logs), l_file, filter, logs->sort_by);
+ logfile_write_with_rotation(sort_vector_back(logs), l_file, logs->sort_by);
sort_vector_pop(logs);
}
int sort_vector_used_size(struct sort_vector *logs);
void sort_vector_pop(struct sort_vector *logs);
void sort_vector_apply_config(struct sort_vector *logs, struct log_config *config);
-int sort_vector_push(struct sort_vector *logs, struct logger_entry *p, struct log_file *l_file, log_filter *filter);
+int sort_vector_push(struct sort_vector *logs, struct logger_entry *p, struct log_file *l_file);
* @param[in] file The file to write to
* @returns 0 if log was successfully written, else 1
*/
-int logfile_write_with_rotation(const struct logger_entry *e, struct log_file *file, log_filter *filter, enum sorting_order sort_by)
+int logfile_write_with_rotation(const struct logger_entry *e, struct log_file *file, enum sorting_order sort_by)
{
- if (!log_should_print_line(filter, e))
- return 1;
int written_bytes = 0;
struct timespec ts;
static bool sv_pushed;
static int sv_push_retval;
-int __wrap_sort_vector_push(struct sort_vector *logs, struct logger_entry *p, struct log_file *l_file, log_filter *filter)
+int __wrap_sort_vector_push(struct sort_vector *logs, struct logger_entry *p, struct log_file *l_file)
{
assert(p == (struct logger_entry *) 0xBADFEEL);
assert(l_file == (struct log_file *) 0xDEFACED);
- assert(filter == (log_filter *) 404);
sv_pushed = true;
return sv_push_retval;
}
static bool sv_flushed;
-int __wrap_logfile_write_with_rotation(const struct logger_entry *e, struct log_file *file, log_filter *filter, enum sorting_order sort_by)
+int __wrap_logfile_write_with_rotation(const struct logger_entry *e, struct log_file *file, enum sorting_order sort_by)
{
assert(e == (struct logger_entry *) 0xBADFEEL);
assert(file == (struct log_file *) 0xDEFACED);
- assert(filter == (log_filter *) 404);
sv_flushed = true;
return 0;
assert(fdi == expected_destroyee);
}
+bool __wrap_log_should_print_line(log_filter *p_filter, const struct logger_entry *entry)
+{
+ assert(p_filter == (log_filter *)404);
+ assert(entry == (struct logger_entry *)0xBADFEEL);
+ return true;
+}
+
int main()
{
struct fd_ops fops = {
return 0;
}
-static bool should_print_line;
-bool __wrap_log_should_print_line(log_filter *p_filter, const struct logger_entry *entry)
-{
- return should_print_line;
-}
-
int main()
{
struct log_file lf;
custom_memcpy = true;
lf.prev_sec = 4444;
lf.prev_nsec = 6666;
- should_print_line = false;
- assert(logfile_write_with_rotation((struct logger_entry *) 0xBA5EBALL, &lf, NULL, SORT_SENT_MONO));
- assert(lf.prev_sec == 4444);
- assert(lf.prev_nsec == 6666);
-
- should_print_line = true;
log_print_log_line_ret = -1;
- assert(logfile_write_with_rotation((struct logger_entry *) 0xBA5EBALL, &lf, NULL, SORT_SENT_MONO));
+ assert(logfile_write_with_rotation((struct logger_entry *) 0xBA5EBALL, &lf, SORT_SENT_MONO));
assert(lf.prev_sec == 4444);
assert(lf.prev_nsec == 6666);
log_print_log_line_ret = 1;
fail_snprintf = true;
- assert(!logfile_write_with_rotation((struct logger_entry *) 0xBA5EBALL, &lf, NULL, SORT_SENT_MONO));
+ assert(!logfile_write_with_rotation((struct logger_entry *) 0xBA5EBALL, &lf, SORT_SENT_MONO));
assert(lf.prev_sec == 3333);
assert(lf.prev_nsec == 9999);
fail_snprintf = false;
- assert(!logfile_write_with_rotation((struct logger_entry *) 0xBA5EBALL, &lf, NULL, SORT_SENT_MONO));
+ assert(!logfile_write_with_rotation((struct logger_entry *) 0xBA5EBALL, &lf, SORT_SENT_MONO));
custom_memcpy = false;
logfile_free(&lf);
#include "../logutil/sort_vector.h"
#include "../logutil/fd_info.h"
-int process_log(const struct logger_entry *e, struct timespec reference_ts, enum sorting_order stamp_type, struct log_file *l_file, log_filter *filter, long timeout);
-void flush_logs(struct sort_vector *logs, struct log_file *l_file, log_filter *filter);
+int process_log(const struct logger_entry *e, struct timespec reference_ts, enum sorting_order stamp_type, struct log_file *l_file, long timeout);
+void flush_logs(struct sort_vector *logs, struct log_file *l_file);
struct fd_info *find_earliest_log(struct fd_info **data_fds, int fd_count, enum sorting_order sort_by);
int put_logs_into_vector(struct fd_info **data_fds, int fd_count, int nfds, struct sort_vector *logs, struct log_file *l_file, log_filter *filter);
long sort_vector_time_span(struct sort_vector *logs);
int written_logs = 0;
bool free_entries = false;
-int __wrap_logfile_write_with_rotation(const struct logger_entry *e, struct log_file *file, log_filter *filter, enum sorting_order sort_by)
+int __wrap_logfile_write_with_rotation(const struct logger_entry *e, struct log_file *file, enum sorting_order sort_by)
{
assert(file == (struct log_file *)0xDDD);
- assert(filter == (log_filter *)0xEEE);
if (free_entries)
free((void *)e); // We shouldn't do this due to const, but there's no easy way around
int fdi_push_log_ret = 0;
int __wrap_fdi_push_log(struct fd_info *fdi, struct sort_vector *logs, struct log_file *l_file, log_filter *filter)
{
+ assert(filter == (log_filter *)0xEEE);
if (fdi_push_log_ret != 0)
return fdi_push_log_ret;
struct logger_entry *ent = calloc(1, sizeof(struct logger_entry));
memcpy(ent, fdi->ops->peek_entry(fdi), sizeof(struct logger_entry));
struct fdi_internal *ii = fdi->priv_data;
ii->has_log = false;
- return sort_vector_push(logs, ent, l_file, filter);
+ return sort_vector_push(logs, ent, l_file);
}
int main()
};
assert(process_log(&ent, ts, SORT_SENT_MONO,
- (struct log_file *)0xDDD, (log_filter *)0xEEE, 1) == 1);
+ (struct log_file *)0xDDD, 1) == 1);
assert(written_logs == 1);
assert(process_log(&ent, ts, SORT_SENT_REAL,
- (struct log_file *)0xDDD, (log_filter *)0xEEE, 1) == 1);
+ (struct log_file *)0xDDD, 1) == 1);
assert(written_logs == 2);
assert(process_log(&ent, ts, SORT_RECV_MONO,
- (struct log_file *)0xDDD, (log_filter *)0xEEE, 1) == 0);
+ (struct log_file *)0xDDD, 1) == 0);
assert(written_logs == 2);
assert(process_log(&ent, ts, SORT_RECV_REAL,
- (struct log_file *)0xDDD, (log_filter *)0xEEE, 1) == 0);
+ (struct log_file *)0xDDD, 1) == 0);
assert(written_logs == 2);
struct sort_vector sv;
sort_vector_finalize(&sv);
assert(sort_vector_time_span(&sv) == 0);
- flush_logs(&sv, (struct log_file *)0xDDD, (log_filter *)0xEEE);
+ flush_logs(&sv, (struct log_file *)0xDDD);
assert(written_logs == 2 && sort_vector_used_size(&sv) == 0);
struct log_file fail_file;
assert(ent2);
ent2->sec_sent_mono = 1;
ent2->nsec_sent_mono = (79 + i) * 10000000;
- sort_vector_push(&sv, ent2, &fail_file, (log_filter *)0xEEE);
+ sort_vector_push(&sv, ent2, &fail_file);
}
assert(sort_vector_time_span(&sv) == 110);
- flush_logs(&sv, (struct log_file *)0xDDD, (log_filter *)0xEEE);
+ flush_logs(&sv, (struct log_file *)0xDDD);
assert(written_logs == 8 && sort_vector_used_size(&sv) == 4);
struct logger_entry *ent3 = calloc(1, sizeof(struct logger_entry));
assert(ent3);
ent3->sec_sent_mono = 0;
ent3->nsec_sent_mono = 999999999;
- sort_vector_push(&sv, ent3, &fail_file, (log_filter *)0xEEE);
+ sort_vector_push(&sv, ent3, &fail_file);
assert(sort_vector_time_span(&sv) == 900);
struct fd_ops test_ops = {
#include "../logutil/sort_vector.h"
size_t total_flushed;
-int __wrap_logfile_write_with_rotation(const struct logger_entry *e, struct log_file *file, log_filter *filter, enum sorting_order sort_by)
+int __wrap_logfile_write_with_rotation(const struct logger_entry *e, struct log_file *file, enum sorting_order sort_by)
{
- assert(filter == (log_filter *)0xF1);
total_flushed += (size_t) e;
return 19;
}
return lhs < rhs;
}
-static bool should_print_line;
-bool __wrap_log_should_print_line(log_filter *p_filter, const struct logger_entry *entry)
-{
- return should_print_line;
-}
-
int __wrap_log_config_get_int(const struct log_config *config, const char *key, int default_val)
{
assert(config == (struct log_config *) 0xC0B0L);
assert(sv.data);
// sorting correctness checks
- should_print_line = true;
sv.dump = 0;
struct log_file lf;
memset(&lf, 0, sizeof(struct log_file));
-#define ADD(x) assert(!sort_vector_push(&sv, (struct logger_entry *) x, &lf, (log_filter *)0xF1))
+#define ADD(x) assert(!sort_vector_push(&sv, (struct logger_entry *) x, &lf))
#define POP(x) \
free_total = 0; \
sort_vector_pop(&sv); \
assert(sv.begin == 4);
assert(sv.end == 3);
- should_print_line = false;
- free_total = 0;
- assert(-EPERM == sort_vector_push(&sv, (struct logger_entry *) 9987, &lf, (log_filter *)0xF1));
- assert(free_total == 9987);
- should_print_line = true;
-
struct logger_entry **const data = sv.data;
free_total = 0;
sort_vector_free(&sv);