err.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /* CC0 (Public domain) - see LICENSE file for details */
  2. #include "err.h"
  3. #if !HAVE_ERR_H
  4. #include <stdarg.h>
  5. #include <stdio.h>
  6. #include <errno.h>
  7. #include <string.h>
  8. #include <stdlib.h>
  9. static const char *progname = "unknown program";
  10. void err_set_progname(const char *name)
  11. {
  12. progname = name;
  13. }
  14. void NORETURN err(int eval, const char *fmt, ...)
  15. {
  16. int err_errno = errno;
  17. va_list ap;
  18. fprintf(stderr, "%s: ", progname);
  19. va_start(ap, fmt);
  20. vfprintf(stderr, fmt, ap);
  21. va_end(ap);
  22. fprintf(stderr, ": %s\n", strerror(err_errno));
  23. exit(eval);
  24. }
  25. void NORETURN errx(int eval, const char *fmt, ...)
  26. {
  27. va_list ap;
  28. fprintf(stderr, "%s: ", progname);
  29. va_start(ap, fmt);
  30. vfprintf(stderr, fmt, ap);
  31. va_end(ap);
  32. fprintf(stderr, "\n");
  33. exit(eval);
  34. }
  35. void warn(const char *fmt, ...)
  36. {
  37. int err_errno = errno;
  38. va_list ap;
  39. fprintf(stderr, "%s: ", progname);
  40. va_start(ap, fmt);
  41. vfprintf(stderr, fmt, ap);
  42. va_end(ap);
  43. fprintf(stderr, ": %s\n", strerror(err_errno));
  44. }
  45. void warnx(const char *fmt, ...)
  46. {
  47. va_list ap;
  48. fprintf(stderr, "%s: ", progname);
  49. va_start(ap, fmt);
  50. vfprintf(stderr, fmt, ap);
  51. va_end(ap);
  52. fprintf(stderr, "\n");
  53. }
  54. #endif