return ret;
}
-dlogutil_sorting_order_e get_proper_sort_by(dlogutil_sorting_order_e sort_by, bool is_pipe, const struct log_config *conf, bool *sorting_needed)
+dlogutil_sorting_order_e get_proper_sort_by(dlogutil_sorting_order_e sort_by, dlogutil_buffer_e buffer, bool is_pipe, const struct log_config *conf, bool *sorting_needed)
{
- dlogutil_sorting_order_e source_sorting = get_order_from_config(conf);
-
*sorting_needed = false;
+ if (buffer == DLOGUTIL_BUF_KMSG)
+ return DLOGUTIL_SORT_SENT_MONO; /* never an Android logger device; does provide the RECV set of timestamps
+ * but we never want to sort on that because that's not how `dmesg` works */
if (!is_pipe)
return DLOGUTIL_SORT_SENT_REAL; // the Android logger only provides this one timestamp and sorts on it, so let's use it
+ dlogutil_sorting_order_e pipe_daemon_sorting = get_order_from_config(conf);
if (sort_by == DLOGUTIL_SORT_DEFAULT)
- return source_sorting; // pick the compatible sorting to make things easier
+ return pipe_daemon_sorting; // pick the compatible sorting to make things easier
- *sorting_needed = (sort_by != source_sorting); // if everything is sorted by the source, we don't have to
+ *sorting_needed = (sort_by != pipe_daemon_sorting); // if everything is sorted by the source, we don't have to
return sort_by;
}
bool sorting_needed;
-#define CHECK(ret, wanted, pipe, sorting) do { \
+#define CHECK(ret, wanted, bufname, pipe, sorting) do { \
sorting_needed = !sorting; \
- assert(ret == get_proper_sort_by(wanted, pipe, ©, &sorting_needed)); \
+ assert(ret == get_proper_sort_by(wanted, bufname, pipe, ©, &sorting_needed)); \
assert(sorting_needed == sorting); \
} while (0)
+ /* KMSG returns SENT_MONO no matter what,
+ * since that is the timestamp dmesg "sorts" on. */
+ CHECK(DLOGUTIL_SORT_SENT_MONO, DLOGUTIL_SORT_DEFAULT , DLOGUTIL_BUF_KMSG, false, false);
+ CHECK(DLOGUTIL_SORT_SENT_MONO, DLOGUTIL_SORT_DEFAULT , DLOGUTIL_BUF_KMSG, true, false);
+ log_config_set(©, "sort_by", "recv_real");
+ CHECK(DLOGUTIL_SORT_SENT_MONO, DLOGUTIL_SORT_DEFAULT , DLOGUTIL_BUF_KMSG, false, false);
+ CHECK(DLOGUTIL_SORT_SENT_MONO, DLOGUTIL_SORT_DEFAULT , DLOGUTIL_BUF_KMSG, true, false);
+ CHECK(DLOGUTIL_SORT_SENT_MONO, DLOGUTIL_SORT_RECV_MONO, DLOGUTIL_BUF_KMSG, false, false);
+ CHECK(DLOGUTIL_SORT_SENT_MONO, DLOGUTIL_SORT_RECV_MONO, DLOGUTIL_BUF_KMSG, true, false);
+ log_config_remove(©, "sort_by");
+
/* Android Logger returns SENT_REAL no matter what, since that is
* the only timestamp available for that backend. */
- CHECK(DLOGUTIL_SORT_SENT_REAL, DLOGUTIL_SORT_DEFAULT , false, false);
+ CHECK(DLOGUTIL_SORT_SENT_REAL, DLOGUTIL_SORT_DEFAULT , DLOGUTIL_BUF_MAIN, false, false);
log_config_set(©, "sort_by", "recv_real");
- CHECK(DLOGUTIL_SORT_SENT_REAL, DLOGUTIL_SORT_DEFAULT , false, false);
- CHECK(DLOGUTIL_SORT_SENT_REAL, DLOGUTIL_SORT_RECV_MONO, false, false);
+ CHECK(DLOGUTIL_SORT_SENT_REAL, DLOGUTIL_SORT_DEFAULT , DLOGUTIL_BUF_MAIN, false, false);
+ CHECK(DLOGUTIL_SORT_SENT_REAL, DLOGUTIL_SORT_RECV_MONO, DLOGUTIL_BUF_MAIN, false, false);
log_config_remove(©, "sort_by");
// Pipe backend defaults to RECV_MONO but obeys the config.
- CHECK(DLOGUTIL_SORT_RECV_MONO, DLOGUTIL_SORT_DEFAULT , true, false);
+ CHECK(DLOGUTIL_SORT_RECV_MONO, DLOGUTIL_SORT_DEFAULT , DLOGUTIL_BUF_MAIN, true, false);
log_config_set(©, "sort_by", "recv_real");
- CHECK(DLOGUTIL_SORT_RECV_REAL, DLOGUTIL_SORT_DEFAULT , true, false);
- CHECK(DLOGUTIL_SORT_SENT_REAL, DLOGUTIL_SORT_SENT_REAL, true, true );
+ CHECK(DLOGUTIL_SORT_RECV_REAL, DLOGUTIL_SORT_DEFAULT , DLOGUTIL_BUF_MAIN, true, false);
+ CHECK(DLOGUTIL_SORT_SENT_REAL, DLOGUTIL_SORT_SENT_REAL, DLOGUTIL_BUF_MAIN, true, true);
log_config_remove(©, "sort_by");
- CHECK(DLOGUTIL_SORT_RECV_MONO, DLOGUTIL_SORT_RECV_MONO, true, false);
- CHECK(DLOGUTIL_SORT_RECV_MONO, DLOGUTIL_SORT_DEFAULT , true, false);
+ CHECK(DLOGUTIL_SORT_RECV_MONO, DLOGUTIL_SORT_RECV_MONO, DLOGUTIL_BUF_MAIN, true, false);
+ CHECK(DLOGUTIL_SORT_RECV_MONO, DLOGUTIL_SORT_DEFAULT , DLOGUTIL_BUF_MAIN, true, false);
#undef CHECK
return 0;