From c0a018b266e564377d21857b08f9c6a14cbb879b Mon Sep 17 00:00:00 2001
From: Dmitrii <naidv88@gmail.com>
Date: Thu, 6 Jan 2022 18:54:26 +0500
Subject: [PATCH] [+] add get log item

---
 dap-sdk/core/src/dap_common.c | 35 +++++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/dap-sdk/core/src/dap_common.c b/dap-sdk/core/src/dap_common.c
index b2dc8c9dec..4e50eae325 100755
--- a/dap-sdk/core/src/dap_common.c
+++ b/dap-sdk/core/src/dap_common.c
@@ -156,8 +156,10 @@ static volatile int s_log_count = 0;
 static pthread_t s_log_thread = 0;
 static void  *s_log_thread_proc(void *arg);
 
+#define STR_LOG_BUF_MAX                       1000
+
 typedef struct log_str_t {
-    char str[1000];
+    char str[STR_LOG_BUF_MAX];
     unsigned int offset;
     struct log_str_t *prev, *next;
 } log_str_t;
@@ -371,9 +373,38 @@ void _log_it(const char *a_log_tag, enum dap_log_level a_ll, const char *a_fmt,
  */
 char *dap_log_get_item(time_t a_start_time, int a_limit)
 {
+#if 0
     UNUSED(a_start_time);
     UNUSED(a_limit);
-    return NULL; // TODO
+#endif
+
+	log_str_t *elem, *tmp;
+	elem = tmp = NULL;
+	char *l_buf = DAP_CALLOC(STR_LOG_BUF_MAX, a_limit);
+	char *s = l_buf;
+
+	struct tm *l_tm_st = localtime (&a_start_time);
+
+    DL_FOREACH_SAFE(s_log_buffer, elem, tmp) {
+		if (a_limit <= 0) break;
+		struct tm l_tm;
+		if (sscanf(tmp->str, "[%d/%d/%d-%d:%d:%d]", &l_tm.tm_mon, &l_tm.tm_mday, &l_tm.tm_year, &l_tm.tm_hour, &l_tm.tm_min, &l_tm.tm_sec) == 6) {
+			l_tm.tm_mon--;
+			if (l_tm_st->tm_year >= l_tm.tm_year &&
+				l_tm_st->tm_mon >= l_tm.tm_mon &&
+				l_tm_st->tm_mday >= l_tm.tm_mday &&
+				l_tm_st->tm_hour >= l_tm.tm_hour &&
+				l_tm_st->tm_min >= l_tm.tm_min &&
+				l_tm_st->tm_sec >= l_tm.tm_sec) {
+				a_limit--;
+				size_t l_len = strlen(tmp->str);
+				strncpy(s, tmp->str, l_len);
+				s += l_len;
+			}
+		}
+	}
+
+    return l_buf;
 }
 
 /**
-- 
GitLab