err.c 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include <err.h>
  2. #include <stdio.h>
  3. #include <stdarg.h>
  4. #include <stdlib.h>
  5. extern char *__progname;
  6. void vwarn(const char *fmt, va_list ap)
  7. {
  8. fprintf (stderr, "%s: ", __progname);
  9. if (fmt) {
  10. vfprintf(stderr, fmt, ap);
  11. fputs (": ", stderr);
  12. }
  13. perror(0);
  14. }
  15. void vwarnx(const char *fmt, va_list ap)
  16. {
  17. fprintf (stderr, "%s: ", __progname);
  18. if (fmt) vfprintf(stderr, fmt, ap);
  19. putc('\n', stderr);
  20. }
  21. _Noreturn void verr(int status, const char *fmt, va_list ap)
  22. {
  23. vwarn(fmt, ap);
  24. exit(status);
  25. }
  26. _Noreturn void verrx(int status, const char *fmt, va_list ap)
  27. {
  28. vwarnx(fmt, ap);
  29. exit(status);
  30. }
  31. void warn(const char *fmt, ...)
  32. {
  33. va_list ap;
  34. va_start(ap, fmt);
  35. vwarn(fmt, ap);
  36. va_end(ap);
  37. }
  38. void warnx(const char *fmt, ...)
  39. {
  40. va_list ap;
  41. va_start(ap, fmt);
  42. vwarnx(fmt, ap);
  43. va_end(ap);
  44. }
  45. _Noreturn void err(int status, const char *fmt, ...)
  46. {
  47. va_list ap;
  48. va_start(ap, fmt);
  49. verr(status, fmt, ap);
  50. va_end(ap);
  51. }
  52. _Noreturn void errx(int status, const char *fmt, ...)
  53. {
  54. va_list ap;
  55. va_start(ap, fmt);
  56. verrx(status, fmt, ap);
  57. va_end(ap);
  58. }