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

/* Simpler gnu89 version of StandaloneFuzzTargetMain.c from LLVM */

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

extern int LLVMFuzzerTestOneInput (const unsigned char *data, size_t size);

int
main (int    argc,
      char **argv)
{
	FILE *f;
	long tell_result;
	size_t n_read, len;
	unsigned char *buf;
	int i;

	if (argc < 2)
		return 1;

	for (i = 1; i < argc; i++) {
		/* Empty string as argument */
		if (!*argv[i])
			continue;

		f = fopen (argv[i], "r");
		assert (f);
		fseek (f, 0, SEEK_END);
		tell_result = ftell (f);
		assert (tell_result >= 0);
		len = (size_t) tell_result;
		fseek (f, 0, SEEK_SET);
		buf = (unsigned char*) malloc (len);
		n_read = fread (buf, 1, len, f);
		assert (n_read == len);
		LLVMFuzzerTestOneInput (buf, len);

		free (buf);
		fclose (f);
	}

	printf ("Done!\n");
	return 0;
}
