error.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. * See the copyright notice in the ACK home directory, in the file "Copyright".
  4. */
  5. #ifndef lint
  6. static char rcsid[] = "$Id$";
  7. #endif
  8. #include <stdarg.h>
  9. #include <stdlib.h>
  10. #include <stdio.h>
  11. #include <out.h>
  12. #include "const.h"
  13. static short nerrors = 0;
  14. static void diag(char *, char *, va_list);
  15. void stop()
  16. {
  17. extern char *outputname;
  18. extern int exitstatus;
  19. if (nerrors) {
  20. unlink(outputname);
  21. exit(nerrors);
  22. }
  23. exit(exitstatus);
  24. }
  25. /* VARARGS1 */
  26. void fatal(char *format, ...)
  27. {
  28. va_list ap;
  29. va_start(ap, format);
  30. nerrors++;
  31. diag("fatal", format, ap);
  32. va_end(ap);
  33. stop();
  34. }
  35. /* VARARGS1 */
  36. void warning(char *format, ...)
  37. {
  38. va_list ap;
  39. va_start(ap, format);
  40. diag("warning", format, ap);
  41. va_end(ap);
  42. }
  43. /* VARARGS1 */
  44. void error(char *format, ...)
  45. {
  46. va_list ap;
  47. va_start(ap, format);
  48. nerrors++;
  49. diag("error", format, ap);
  50. va_end(ap);
  51. }
  52. /* VARARGS1 */
  53. int do_verbose(char *format, ...)
  54. {
  55. va_list ap;
  56. va_start(ap, format);
  57. diag((char *) 0, format, ap);
  58. va_end(ap);
  59. return (0==0);
  60. }
  61. static void diag(char *tail, char *format, va_list ap)
  62. {
  63. extern char *progname, *archname, *modulname;
  64. fprintf(stderr, "%s: ", progname);
  65. if (archname && modulname)
  66. fprintf(stderr, "%s(%.14s): ", archname, modulname);
  67. else if (archname)
  68. fprintf(stderr, "%s: ", archname);
  69. else if (modulname)
  70. fprintf(stderr, "%s: ", modulname);
  71. vfprintf(stderr, format, ap);
  72. if (tail) fprintf(stderr, " (%s)\n", tail);
  73. else putc('\n', stderr);
  74. }