aboutsummaryrefslogtreecommitdiff
path: root/pw_multisink/util.cc
diff options
context:
space:
mode:
authorArmando Montanez <amontanez@google.com>2021-09-30 21:38:20 -0700
committerCQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>2021-10-07 16:39:38 +0000
commitfb7b4785477e224eb102a45d4e8f27b325a93950 (patch)
treeaa0c27ee51030152bd9e8eb43ce186254d23e15b /pw_multisink/util.cc
parent559dd9710dcfdb016fc2e94d4864e88c1245b0be (diff)
downloadpigweed-fb7b4785477e224eb102a45d4e8f27b325a93950.tar.gz
pw_multisink: Unsafe iteration dump utilities
Addds a crash-time helper to dump a MultiSink used for proto encoded logs. Change-Id: I5b8efb3f2d3c86f403896fca9cdd4ddde5e6cc39 Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/63282 Pigweed-Auto-Submit: Armando Montanez <amontanez@google.com> Commit-Queue: Armando Montanez <amontanez@google.com> Reviewed-by: Ewout van Bekkum <ewout@google.com>
Diffstat (limited to 'pw_multisink/util.cc')
-rw-r--r--pw_multisink/util.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/pw_multisink/util.cc b/pw_multisink/util.cc
new file mode 100644
index 000000000..825701de6
--- /dev/null
+++ b/pw_multisink/util.cc
@@ -0,0 +1,34 @@
+// Copyright 2021 The Pigweed Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy of
+// the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+#include "pw_multisink/util.h"
+
+#include "pw_bytes/span.h"
+#include "pw_function/function.h"
+#include "pw_multisink/multisink.h"
+#include "pw_status/status.h"
+
+namespace pw::multisink {
+
+Status UnsafeDumpMultiSinkLogs(MultiSink& sink,
+ pw::log::LogEntries::StreamEncoder& encoder,
+ size_t max_num_entries) {
+ auto callback = [&encoder](ConstByteSpan entry) {
+ encoder.WriteBytes(
+ static_cast<uint32_t>(pw::log::LogEntries::Fields::ENTRIES), entry);
+ };
+ return sink.UnsafeForEachEntry(callback, max_num_entries);
+}
+
+} // namespace pw::multisink