mynewt_log_mgmt: need to read chunk by chunk
- Earlier the entries were read one entry at a time and that is
different what we have currently in mynewt, this needs to change
so that we read logs hcunk by chunk until we reach the entry length
- The encode funtion needs to get fixed which will be in a subsequent
PR
diff --git a/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c b/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
index eaeb6ea..30a3451 100644
--- a/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
+++ b/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
@@ -25,7 +25,7 @@
struct mynewt_log_mgmt_walk_arg {
log_mgmt_foreach_entry_fn *cb;
- uint8_t body[LOG_MGMT_CHUNK_SIZE];
+ uint8_t chunk[128];
void *arg;
};
@@ -108,8 +108,8 @@
{
struct mynewt_log_mgmt_walk_arg *mynewt_log_mgmt_walk_arg;
struct log_mgmt_entry entry;
- int header_len;
int read_len;
+ int offset;
int rc;
mynewt_log_mgmt_walk_arg = log_offset->lo_arg;
@@ -141,25 +141,34 @@
#if MYNEWT_VAL(LOG_VERSION) < 3
entry.type = LOG_ETYPE_STRING;
entry.flags = 0;
- header_len = sizeof leh;
- read_len = min(len - header_len, log->l_max_entry_len - header_len);
#else
entry.type = leh->ue_etype;
entry.flags = leh->ue_flags;
entry.imghash = (leh->ue_flags & LOG_FLAGS_IMG_HASH) ?
leh->ue_imghash : NULL;
- header_len = log_hdr_len(leh);
- read_len = log->l_max_entry_len - header_len;
#endif
- rc = log_read(log, dptr, mynewt_log_mgmt_walk_arg->body, header_len,
- read_len);
- if (rc < 0) {
- return MGMT_ERR_EUNKNOWN;
+
+ for (offset = 0; offset < len; offset += 128) {
+ if (len - offset < 128) {
+ read_len = len - offset;
+ } else {
+ read_len = 128;
+ }
+
+ rc = log_read_body(log, dptr, mynewt_log_mgmt_walk_arg->chunk, offset,
+ read_len);
+ if (rc < 0) {
+ return MGMT_ERR_EUNKNOWN;
+ }
+ entry.len = rc;
+ entry.data = mynewt_log_mgmt_walk_arg->chunk;
+ rc = mynewt_log_mgmt_walk_arg->cb(&entry, mynewt_log_mgmt_walk_arg->arg);
+ if (rc) {
+ return rc;
+ }
}
- entry.len = rc;
- entry.data = mynewt_log_mgmt_walk_arg->body;
- return mynewt_log_mgmt_walk_arg->cb(&entry, mynewt_log_mgmt_walk_arg->arg);
+ return 0;
}
int