/*
 File :       error.c
 Brief :      Management of errors.
 Author :     CLS
 */
#include <stdarg.h>
#include <stdio.h>
#include <string.h>

#include "fes.h"
#include "fes_int.h"
#include "error.h"

/* Error code message */
static const char* err[] =
{ "Success", "Not enough memory", "netCDF error", "IO error",
        "Configuration file contains error", "Tide is undefined" };

/*
 */
void set_fes_error(fes_handler* const fes, const fes_enum_error errcode)
{
    fes->last_errno = errcode;
    strncpy(fes->last_error, err[errcode], sizeof(fes->last_error) - 1);
}

/*
 */
void set_fes_extended_error(
        fes_handler* const fes,
        const fes_enum_error errcode,
        const char* format,
        ...)
{
    va_list argp;

    fes->last_errno = errcode;

    va_start(argp, format);
    vsnprintf(fes->last_error, sizeof(fes->last_error), format, argp);
    va_end(argp);
}

/*
 */
fes_enum_error fes_errno(FES fes)
{
    return ((fes_handler*) fes)->last_errno;
}

/*
 */
const char* fes_error(FES fes)
{
    return ((fes_handler*) fes)->last_error;
}
