+static int __write_to_log_kernel(log_id_t log_id, log_priority prio, const char *tag, const char *msg)
+{
+ ssize_t ret;
+ int log_fd;
+ struct iovec vec[3];
+
+ if (log_id < LOG_ID_APPS) {
+ if(prio < g_dlog_level) {
+ return 0;
+ }
+ } else if (LOG_ID_MAX <= log_id) {
+ return 0;
+ }
+ if (log_id < LOG_ID_MAX)
+ log_fd = log_fds[log_id];
+ else
+ return -1; // for TC
+
+ if (!tag)
+ tag = "";
+
+ if (!msg)
+ return -1;
+
+ vec[0].iov_base = (unsigned char *) &prio;
+ vec[0].iov_len = 1;
+ vec[1].iov_base = (void *) tag;
+ vec[1].iov_len = strlen(tag) + 1;
+ vec[2].iov_base = (void *) msg;
+ vec[2].iov_len = strlen(msg) + 1;
+
+ ret = writev(log_fd, vec, 3);
+
+ return ret;
+}
+static char dlog_pri_to_char (log_priority pri)
+{
+ switch (pri) {
+ case DLOG_VERBOSE: return 'V';
+ case DLOG_DEBUG: return 'D';
+ case DLOG_INFO: return 'I';
+ case DLOG_WARN: return 'W';
+ case DLOG_ERROR: return 'E';
+ case DLOG_FATAL: return 'F';
+ case DLOG_SILENT: return 'S';
+
+ case DLOG_DEFAULT:
+ case DLOG_UNKNOWN:
+ default:
+ return '?';
+ }
+}
+#ifdef SD_JOURNAL_SUPPORT