// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

// Parse some flags
#include <string>
#include <vector>

static std::vector<std::string> Flags;

extern "C" int LLVMFuzzerInitialize(int *Argc, char ***Argv) {
  // Parse --flags and anything after -ignore_remaining_args=1 is passed.
  int I = 1;
  while (I < *Argc) {
    std::string S((*Argv)[I++]);
    if (S == "-ignore_remaining_args=1")
      break;
    if (S.substr(0, 2) == "--")
      Flags.push_back(S);
  }
  while (I < *Argc)
    Flags.push_back(std::string((*Argv)[I++]));

  return 0;
}

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
  fprintf(stderr, "BINGO ");
  for (auto Flag : Flags)
    fprintf(stderr, "%s ", Flag.c_str());
  fprintf(stderr, "\n");
  return 0;
}
