breakpad 0.1.0

Basic breakpad/crashpad wrapper for Rust
Documentation
#include "google_breakpad/processor/basic_source_line_resolver.h"
#include "google_breakpad/processor/minidump.h"
#include "google_breakpad/processor/minidump_processor.h"
#include "google_breakpad/processor/process_state.h"

#include "cpp/data_definitions.h"
#include "cpp/memstream.h"
#include "cpp/mmap_symbol_supplier.h"
#include "cpp/processor.h"

using google_breakpad::BasicSourceLineResolver;
using google_breakpad::Minidump;
using google_breakpad::MinidumpProcessor;
using google_breakpad::ProcessState;

process_state_t *process_minidump(const char *buffer,
                                  size_t buffer_size,
                                  symbol_entry_t *symbols,
                                  size_t symbol_count,
                                  int *result_out) {
  if (buffer == nullptr) {
    *result_out = google_breakpad::PROCESS_ERROR_MINIDUMP_NOT_FOUND;
    return nullptr;
  }

  ProcessState *state = new ProcessState();
  if (state == nullptr) {
    *result_out = -1;  // Memory allocation issue
    return nullptr;
  }

  BasicSourceLineResolver resolver;
  MmapSymbolSupplier supplier(symbol_count, symbols);
  MinidumpProcessor processor(&supplier, &resolver);

  imemstream in(buffer, buffer_size);
  Minidump minidump(in);
  if (!minidump.Read()) {
    *result_out = google_breakpad::PROCESS_ERROR_MINIDUMP_NOT_FOUND;
    return nullptr;
  }

  *result_out = processor.Process(&minidump, state);
  if (*result_out != google_breakpad::PROCESS_OK) {
    delete state;
    return nullptr;
  }

  return process_state_t::cast(state);
}