// SPDX-License-Identifier: GPL-2.0
#include "util.h"
#include "../util/debug.h"
#include <stdio.h>

/*
 * Default error logging functions
 */
static int perf_stdio__error(const char *format, va_list args)
{
	fprintf(stderr, "Error:\n");
	vfprintf(stderr, format, args);
	return 0;
}

static int perf_stdio__warning(const char *format, va_list args)
{
	if (quiet)
		return 0;

	fprintf(stderr, "Warning:\n");
	vfprintf(stderr, format, args);
	return 0;
}

static struct perf_error_ops default_eops =
{
	.error		= perf_stdio__error,
	.warning	= perf_stdio__warning,
};

static struct perf_error_ops *perf_eops = &default_eops;


int ui__error(const char *format, ...)
{
	int ret;
	va_list args;

	va_start(args, format);
	ret = perf_eops->error(format, args);
	va_end(args);

	return ret;
}

int ui__warning(const char *format, ...)
{
	int ret;
	va_list args;
	if (quiet)
		return 0;

	va_start(args, format);
	ret = perf_eops->warning(format, args);
	va_end(args);

	return ret;
}

/**
 * perf_error__register - Register error logging functions
 * @eops: The pointer to error logging function struct
 *
 * Register UI-specific error logging functions. Before calling this,
 * other logging functions should be unregistered, if any.
 */
int perf_error__register(struct perf_error_ops *eops)
{
	if (perf_eops != &default_eops)
		return -1;

	perf_eops = eops;
	return 0;
}

/**
 * perf_error__unregister - Unregister error logging functions
 * @eops: The pointer to error logging function struct
 *
 * Unregister already registered error logging functions.
 */
int perf_error__unregister(struct perf_error_ops *eops)
{
	if (perf_eops != eops)
		return -1;

	perf_eops = &default_eops;
	return 0;
}