1 // Copyright 2018 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "trace-test-utils/read_records.h"
6 
7 #include <stdio.h>
8 
9 #include <utility>
10 
11 #include <trace-reader/reader_internal.h>
12 
13 namespace trace_testing {
14 
ReadRecordsAndErrors(const uint8_t * buffer,size_t buffer_size,fbl::Vector<trace::Record> * out_records,fbl::Vector<fbl::String> * out_errors)15 bool ReadRecordsAndErrors(const uint8_t* buffer, size_t buffer_size,
16                           fbl::Vector<trace::Record>* out_records,
17                           fbl::Vector<fbl::String>* out_errors) {
18     trace::TraceReader reader(
19         [out_records](trace::Record record) {
20             out_records->push_back(std::move(record));
21         },
22         [out_errors](fbl::String error) {
23             out_errors->push_back(std::move(error));
24         });
25 
26     trace::internal::TraceBufferReader buffer_reader(
27         [&reader](trace::Chunk chunk) {
28             if (!reader.ReadRecords(chunk)) {
29                 // Nothing to do, error already recorded.
30             }
31         },
32         [out_errors](fbl::String error) {
33             out_errors->push_back(std::move(error));
34         });
35 
36     return buffer_reader.ReadChunks(buffer, buffer_size);
37 }
38 
ReadRecords(const uint8_t * buffer,size_t buffer_size,fbl::Vector<trace::Record> * out_records)39 bool ReadRecords(const uint8_t* buffer, size_t buffer_size,
40                  fbl::Vector<trace::Record>* out_records) {
41     fbl::Vector<fbl::String> errors;
42     if (!ReadRecordsAndErrors(buffer, buffer_size, out_records, &errors)) {
43         fprintf(stderr, "Error reading buffer\n");
44         return false;
45     }
46 
47     for (const auto& error : errors) {
48         fprintf(stderr, "error: %s\n", error.c_str());
49     }
50     if (errors.size() != 0) {
51         fprintf(stderr, "Errors encountered\n");
52         return false;
53     }
54 
55     return true;
56 }
57 
58 }  // namespace trace_testing
59