/* Copyright (C) 2008 Emmanuel Varoquaux
This file is part of XOS.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
#include "error.h"
#include "builtins/builtins.h"
#include "vars.h"
#include
#include
#include
#include
#include
static void print_error_message_list(int print_line_number, int errnum, const char *prefix, const char *format, va_list ap)
{
fflush(stdout);
fprintf(stderr, "%s: ", script_name ? : program_invocation_name);
if (print_line_number && print_line_number_on_error)
fprintf(stderr, "line %d: ", line_number);
if (current_builtin)
fprintf(stderr, "%s: ", current_builtin->name);
if (prefix)
fprintf(stderr, "%s: ", prefix);
vfprintf(stderr, format, ap);
if (errnum)
fprintf(stderr, ": %s", strerror(errnum));
fputc('\n', stderr);
}
static void print_error_message_var(int print_line_number, int errnum, const char *prefix, const char *format, ...)
{
va_list ap;
va_start(ap, format);
print_error_message_list(print_line_number, errnum, prefix, format, ap);
va_end(ap);
}
/* Erreurs techniques */
void sys_error(int errnum, const char *format, ...)
{
va_list ap;
va_start(ap, format);
print_error_message_list(0, errnum, NULL, format, ap);
va_end(ap);
}
void fatal_error(const char *format, ...)
{
va_list ap;
va_start(ap, format);
print_error_message_list(0, 0, NULL, format, ap);
va_end(ap);
exit(EXIT_FAILURE);
}
/* Erreurs fonctionnelles */
void generic_error(const char *format, ...)
{
va_list ap;
va_start(ap, format);
print_error_message_list(1, 0, NULL, format, ap);
va_end(ap);
}
void syntax_error(const char *format, ...)
{
va_list ap;
va_start(ap, format);
print_error_message_list(1, 0, "Syntax error", format, ap);
va_end(ap);
}
void parse_error(const char *token)
{
print_error_message_var(1, 0, NULL, "Parse error near token `%s'", token);
}
void file_error(int errnum, const char *path)
{
print_error_message_var(1, errnum, NULL, "%s", path);
}
void process_error(int errnum, pid_t pid)
{
print_error_message_var(1, errnum, NULL, "%d", pid);
}
void invalid_option_error(int opt)
{
print_error_message_var(1, 0, NULL, "invalid option -- %c", opt);
}