summaryrefslogtreecommitdiffhomepage
path: root/src/output/sfrt_output_error.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/output/sfrt_output_error.c')
-rw-r--r--src/output/sfrt_output_error.c229
1 files changed, 0 insertions, 229 deletions
diff --git a/src/output/sfrt_output_error.c b/src/output/sfrt_output_error.c
deleted file mode 100644
index 24cb21a..0000000
--- a/src/output/sfrt_output_error.c
+++ /dev/null
@@ -1,229 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <sofort/sofort.h>
-#include "sofort_driver_impl.h"
-#include "sofort_dprintf_impl.h"
-
-static const char aclr_reset[] = "\x1b[0m";
-static const char aclr_bold[] = "\x1b[1m";
-
-static const char aclr_red[] = "\x1b[31m";
-static const char aclr_green[] = "\x1b[32m";
-static const char aclr_blue[] = "\x1b[34m";
-static const char aclr_magenta[] = "\x1b[35m";
-
-static const char const * const sfrt_error_strings[SFRT_ERR_CAP] = {
- [SFRT_ERR_FLOW_ERROR] = "flow error: unexpected condition or other",
- [SFRT_ERR_FLEE_ERROR] = "flees and bugs and cats and mice",
- [SFRT_ERR_NULL_CONTEXT] = "null driver or unit context",
- [SFRT_ERR_NULL_SOURCE] = "source file does not define any data",
- [SFRT_ERR_INVALID_CONTEXT] = "invalid driver or unit context",
- [SFRT_ERR_INVALID_SOURCE] = "invalid source file",
- [SFRT_ERR_SOURCE_SIZE_ZERO] = "cannot map an empty source file",
-};
-
-static const char * sfrt_output_error_header(const struct sfrt_error_info * erri)
-{
- if (erri->eflags & SFRT_ERROR_CHILD)
- return "exec error upon";
-
- else if (erri->eflags & SFRT_ERROR_TOP_LEVEL)
- return "error logged in";
-
- else if (erri->eflags & SFRT_ERROR_NESTED)
- return "< returned to >";
-
- else
- return "distorted state";
-}
-
-static const char * sfrt_output_unit_header(const struct sfrt_error_info * erri)
-{
- if (!(erri->eflags & SFRT_ERROR_CUSTOM))
- return "while opening";
-
- else if (erri->elibcode == SFRT_ERR_SOURCE_SIZE_ZERO)
- return "while mapping";
-
- else
- return "while parsing";
-}
-
-static const char * sfrt_output_strerror(
- const struct sfrt_error_info * erri,
- char (*errbuf)[256])
-{
- if (erri->eflags & SFRT_ERROR_CUSTOM)
- return ((erri->elibcode < 0) || (erri->elibcode >= SFRT_ERR_CAP))
- ? "internal error: please report to the maintainer"
- : sfrt_error_strings[erri->elibcode];
-
- else if (erri->eflags & SFRT_ERROR_NESTED)
- return "";
-
- else if (erri->eflags & SFRT_ERROR_CHILD)
- return "(see child process error messages)";
-
- else if (erri->esyscode == ENOBUFS)
- return "input error: string length exceeds buffer size.";
-
- else
- return strerror_r(erri->esyscode,*errbuf,sizeof(*errbuf))
- ? "internal error: strerror_r(3) call failed"
- : *errbuf;
-}
-
-static int sfrt_output_error_record_plain(
- const struct sfrt_driver_ctx * dctx,
- const struct sfrt_error_info * erri)
-{
- const char * epath;
- char errbuf[256];
-
- int fderr = sfrt_driver_fderr(dctx);
- const char * errdesc = sfrt_output_strerror(erri,&errbuf);
-
- epath = erri->euctx
- ? *erri->euctx->path
- : erri->eunit;
-
- if (epath && !(erri->eflags & SFRT_ERROR_NESTED))
- if (sfrt_dprintf(
- fderr,
- "%s: [%s] '%s':\n",
- dctx->program,
- sfrt_output_unit_header(erri),
- epath) < 0)
- return -1;
-
- if (sfrt_dprintf(
- fderr,
- "%s: %s %s(), line %d%s%s.\n",
- dctx->program,
- sfrt_output_error_header(erri),
- erri->efunction,
- erri->eline,
- strlen(errdesc) ? ": " : "",
- errdesc) < 0)
- return -1;
-
- return 0;
-}
-
-static int sfrt_output_error_record_annotated(
- const struct sfrt_driver_ctx * dctx,
- const struct sfrt_error_info * erri)
-{
- const char * epath;
- char errbuf[256];
-
- int fderr = sfrt_driver_fderr(dctx);
- const char * errdesc = sfrt_output_strerror(erri,&errbuf);
-
- epath = erri->euctx
- ? *erri->euctx->path
- : erri->eunit;
-
- if (epath && !(erri->eflags & SFRT_ERROR_NESTED))
- if (sfrt_dprintf(
- fderr,
- "%s%s%s:%s %s[%s]%s %s%s'%s'%s:\n",
-
- aclr_bold,aclr_magenta,
- dctx->program,
- aclr_reset,
-
- aclr_bold,
- sfrt_output_unit_header(erri),
- aclr_reset,
-
- aclr_bold,aclr_red,
- epath,
- aclr_reset) < 0)
- return -1;
-
- if (sfrt_dprintf(
- fderr,
- "%s%s%s:%s %s%s%s %s%s%s()%s, %s%sline %d%s%s%s%s%s.\n",
-
- aclr_bold,aclr_magenta,
- dctx->program,
- aclr_reset,
-
- aclr_bold,
- sfrt_output_error_header(erri),
- aclr_reset,
-
- aclr_bold,aclr_blue,
- erri->efunction,
- aclr_reset,
-
- aclr_bold,aclr_green,
- erri->eline,
- aclr_reset,
- strlen(errdesc) ? ": " : "",
-
- aclr_bold,
- errdesc,
- aclr_reset) < 0)
- return -1;
-
- return 0;
-}
-
-int sfrt_output_error_record(
- const struct sfrt_driver_ctx * dctx,
- const struct sfrt_error_info * erri)
-{
- if (dctx->cctx->drvflags & SFRT_DRIVER_ANNOTATE_NEVER)
- return sfrt_output_error_record_plain(dctx,erri);
-
- else if (dctx->cctx->drvflags & SFRT_DRIVER_ANNOTATE_ALWAYS)
- return sfrt_output_error_record_annotated(dctx,erri);
-
- else if (isatty(sfrt_driver_fderr(dctx)))
- return sfrt_output_error_record_annotated(dctx,erri);
-
- else
- return sfrt_output_error_record_plain(dctx,erri);
-}
-
-static int sfrt_output_error_vector_plain(const struct sfrt_driver_ctx * dctx)
-{
- struct sfrt_error_info ** perr;
-
- for (perr=dctx->errv; *perr; perr++)
- if (sfrt_output_error_record_plain(dctx,*perr))
- return -1;
-
- return 0;
-}
-
-static int sfrt_output_error_vector_annotated(const struct sfrt_driver_ctx * dctx)
-{
- struct sfrt_error_info ** perr;
-
- for (perr=dctx->errv; *perr; perr++)
- if (sfrt_output_error_record_annotated(dctx,*perr))
- return -1;
-
- return 0;
-}
-
-int sfrt_output_error_vector(const struct sfrt_driver_ctx * dctx)
-{
- if (dctx->cctx->drvflags & SFRT_DRIVER_ANNOTATE_NEVER)
- return sfrt_output_error_vector_plain(dctx);
-
- else if (dctx->cctx->drvflags & SFRT_DRIVER_ANNOTATE_ALWAYS)
- return sfrt_output_error_vector_annotated(dctx);
-
- else if (isatty(sfrt_driver_fderr(dctx)))
- return sfrt_output_error_vector_annotated(dctx);
-
- else
- return sfrt_output_error_vector_plain(dctx);
-}