From 1d69b7a45d8a7e1f1c17ae5d361b8d74a0eabdb5 Mon Sep 17 00:00:00 2001 From: Michal Bloch Date: Thu, 20 Apr 2023 22:21:57 +0200 Subject: [PATCH] libdlogutil: printing buffers get aliased Change-Id: I7b12fe7ab7cef14479cb09f6335eef54b6b131af Signed-off-by: Michal Bloch --- src/libdlogutil/lib.c | 2 +- src/libdlogutil/logretrieve.c | 20 +++++++++++++++++++- src/libdlogutil/logretrieve.h | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/libdlogutil/lib.c b/src/libdlogutil/lib.c index 076c0e2..a0e304b 100644 --- a/src/libdlogutil/lib.c +++ b/src/libdlogutil/lib.c @@ -215,7 +215,7 @@ EXPORT_API int dlogutil_config_connect(dlogutil_config_s *config, dlogutil_state log_id_t aliased[LOG_ID_MAX]; for (int i = 0; i < LOG_ID_MAX; ++i) aliased[i] = LOG_ID_INVALID; - int fdi_cnt = create_initial_fdis(&fdi_ptrs, config->buffers, backend, config->mode == DLOGUTIL_MODE_COMPRESSED_MEMORY_DUMP, &conf, aliased); + int fdi_cnt = create_initial_fdis(&fdi_ptrs, config->buffers, config->mode, backend, config->mode == DLOGUTIL_MODE_COMPRESSED_MEMORY_DUMP, &conf, aliased); if (fdi_cnt < 0) return TIZEN_ERROR_IO_ERROR; if (fdi_cnt == 0) diff --git a/src/libdlogutil/logretrieve.c b/src/libdlogutil/logretrieve.c index f19eaaf..c2dea88 100644 --- a/src/libdlogutil/logretrieve.c +++ b/src/libdlogutil/logretrieve.c @@ -62,7 +62,22 @@ static size_t get_required_fdi_capacity(const struct fd_ops *ops_by_buffer[stati return ret; } -int create_initial_fdis(struct fd_info ***fdis, int enabled_buffers, backend_t backend, bool is_compressed_memory, const struct log_config *conf, log_id_t aliased[LOG_ID_MAX]) +void alias_printing_pipes(const struct fd_ops *ops_by_buffer[static LOG_ID_MAX], log_id_t aliased[static LOG_ID_MAX]) +{ + log_id_t first_pipe = 0; + while (first_pipe < LOG_ID_MAX && ops_by_buffer[first_pipe] != &ops_pipe) + ++ first_pipe; + + for (log_id_t i = first_pipe + 1; i < LOG_ID_MAX; ++i) { + if (ops_by_buffer[i] != &ops_pipe) + continue; + + aliased[i] = first_pipe; + ops_by_buffer[i] = NULL; + } +} + +int create_initial_fdis(struct fd_info ***fdis, int enabled_buffers, dlogutil_mode_e mode, backend_t backend, bool is_compressed_memory, const struct log_config *conf, log_id_t aliased[LOG_ID_MAX]) { assert(fdis); assert(conf); @@ -73,6 +88,9 @@ int create_initial_fdis(struct fd_info ***fdis, int enabled_buffers, backend_t b for (size_t i = 0; i < NELEMS(ops_by_buffer); ++i) ops_by_buffer[i] = get_ops_by_buffer(i, enabled_buffers, backend, is_compressed_memory); + if (mode != DLOGUTIL_MODE_NONPRINTING) + alias_printing_pipes(ops_by_buffer, aliased); + int fdi_cnt = 0; __attribute__((cleanup(fdi_array_free))) struct fd_info **fdi_ptrs = calloc(get_required_fdi_capacity(ops_by_buffer), sizeof *fdi_ptrs); if (!fdi_ptrs) diff --git a/src/libdlogutil/logretrieve.h b/src/libdlogutil/logretrieve.h index f4725de..eaff183 100644 --- a/src/libdlogutil/logretrieve.h +++ b/src/libdlogutil/logretrieve.h @@ -47,6 +47,6 @@ typedef struct dlogutil_state { log_id_t aliased[LOG_ID_MAX]; } dlogutil_state_s; -int create_initial_fdis(struct fd_info ***fdis, int enabled_buffers, backend_t backend, bool is_compressed_memory, const struct log_config *conf, log_id_t aliased[LOG_ID_MAX]); +int create_initial_fdis(struct fd_info ***fdis, int enabled_buffers, dlogutil_mode_e mode, backend_t backend, bool is_compressed_memory, const struct log_config *conf, log_id_t aliased[LOG_ID_MAX]); int dlogutil_state_init(dlogutil_state_s *state, struct fd_info ***data_fds_ptr, int fd_count, dlogutil_config_s *config, bool sorting_needed, dlogutil_sorting_order_e real_sort_by, const struct log_config *conf, log_id_t aliased[LOG_ID_MAX]); int do_print_once(dlogutil_state_s *state, int timeout, dlogutil_entry_s **out); -- 2.7.4