// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <glob.h>
#include <stdio.h>

// This binary will test glob path passed to it as arg and write the path to
// stdout if found, else will write error to stderr and return 1.
int main(int argc, const char** argv) {
  if (argc != 2) {
    fprintf(stderr, "Usage: %s <glob_path>", argv[0]);
    return 1;
  }
  auto glob_str = argv[1];
  glob_t globbuf;
  auto status = glob(glob_str, 0, nullptr, &globbuf);
  if (status != 0) {
    fprintf(stderr, "glob failed: %d", status);
    return 1;
  }
  if (globbuf.gl_pathc == 0) {
    fprintf(stderr, "no match found");
    globfree(&globbuf);
    return 1;
  }
  for (size_t i = 0; i < globbuf.gl_pathc; i++) {
    fprintf(stdout, "%s\n", globbuf.gl_pathv[i]);
  }
  globfree(&globbuf);
  return 0;
}
