Merge pull request #45 from vrahane/log_watermark_response_fix

log_mgmt:watermark should be set at last log entry
diff --git a/cmd/log_mgmt/include/log_mgmt/log_mgmt_impl.h b/cmd/log_mgmt/include/log_mgmt/log_mgmt_impl.h
index 0a62652..81b65d3 100644
--- a/cmd/log_mgmt/include/log_mgmt/log_mgmt_impl.h
+++ b/cmd/log_mgmt/include/log_mgmt/log_mgmt_impl.h
@@ -122,7 +122,7 @@
  * @return                      0 on success, non-zero on failure
  */
 int
-log_mgmt_impl_set_watermark(struct log_mgmt_log *log, int index);
+log_mgmt_impl_set_watermark(const struct log_mgmt_log *log, int index);
 
 #ifdef __cplusplus
 }
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 77ce6cd..edff9a0 100644
--- a/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
+++ b/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
@@ -75,7 +75,7 @@
 }
 
 int
-log_mgmt_impl_set_watermark(struct log_mgmt_log *log, int index)
+log_mgmt_impl_set_watermark(const struct log_mgmt_log *log, int index)
 {
 #if MYNEWT_VAL(LOG_STORAGE_WATERMARK)
     struct log *tmplog;
diff --git a/cmd/log_mgmt/src/log_mgmt.c b/cmd/log_mgmt/src/log_mgmt.c
index 0cd94a9..0686c37 100644
--- a/cmd/log_mgmt/src/log_mgmt.c
+++ b/cmd/log_mgmt/src/log_mgmt.c
@@ -40,6 +40,8 @@
 
 /** Context used during walks. */
 struct log_walk_ctxt {
+    /* last encoded index */
+    uint32_t last_enc_index;
     /* The number of bytes encoded to the response so far. */
     size_t rsp_len;
     /* The encoder to use to write the current log entry. */
@@ -248,6 +250,7 @@
     }
 
     ctxt->counter++;
+    ctxt->last_enc_index = entry->index;
 
     return 0;
 }
@@ -310,6 +313,11 @@
         return LOG_MGMT_ERR_ENOMEM;
     }
 
+#if LOG_MGMT_READ_WATERMARK_UPDATE
+    if (!rc) {
+        log_mgmt_impl_set_watermark(log, ctxt.last_enc_index);
+    }
+#endif
 err:
     return rc;
 }
@@ -429,19 +437,10 @@
         if (log.type != LOG_MGMT_TYPE_STREAM) {
             if (name_len == 0 || strcmp(name, log.name) == 0) {
                 rc = log_encode(&log, &logs, timestamp, index);
-
-#if LOG_MGMT_READ_WATERMARK_UPDATE
-                if (rc == 0 || rc == LOG_MGMT_ERR_EUNKNOWN) {
-                    log_mgmt_impl_set_watermark(&log, index);
-                }
-#endif
                 if (rc) {
                     goto err;
                 }
 
-#if LOG_MGMT_READ_WATERMARK_UPDATE
-                log_mgmt_impl_set_watermark(&log, index);
-#endif
                 /* If the client specified this log, he isn't interested in the
                  * remaining ones.
                  */
diff --git a/cmd/log_mgmt/src/stubs.c b/cmd/log_mgmt/src/stubs.c
index 05706e5..db1b5b7 100644
--- a/cmd/log_mgmt/src/stubs.c
+++ b/cmd/log_mgmt/src/stubs.c
@@ -65,7 +65,7 @@
 }
 
 int __attribute__((weak))
-log_mgmt_impl_set_watermark(struct log_mgmt_log *log, int index)
+log_mgmt_impl_set_watermark(const struct log_mgmt_log *log, int index)
 {
     return MGMT_ERR_ENOTSUP;
 }