logo

utils-std

Collection of commonly available Unix tools git clone https://anongit.hacktivis.me/git/utils-std.git/

err.c (1603B)


  1. // Collection of Unix tools, comparable to coreutils
  2. // SPDX-FileCopyrightText: 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
  3. // SPDX-License-Identifier: MPL-2.0
  4. #define _POSIX_C_SOURCE 200809L
  5. #include "err.h"
  6. #include <errno.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. void
  11. utils_vwarn(const char *fmt, va_list ap)
  12. {
  13. int err = errno;
  14. fprintf(stderr, "%s: warning: ", argv0);
  15. if(fmt)
  16. {
  17. vfprintf(stderr, fmt, ap);
  18. fputs(": ", stderr);
  19. }
  20. fputs(strerror(err), stderr);
  21. }
  22. void
  23. utils_vwarnx(const char *fmt, va_list ap)
  24. {
  25. fprintf(stderr, "%s: warning: ", argv0);
  26. if(fmt) vfprintf(stderr, fmt, ap);
  27. putc('\n', stderr);
  28. }
  29. _Noreturn void
  30. utils_verr(int status, const char *fmt, va_list ap)
  31. {
  32. int err = errno;
  33. fprintf(stderr, "%s: error: ", argv0);
  34. if(fmt)
  35. {
  36. vfprintf(stderr, fmt, ap);
  37. fputs(": ", stderr);
  38. }
  39. fputs(strerror(err), stderr);
  40. exit(status);
  41. }
  42. _Noreturn void
  43. utils_verrx(int status, const char *fmt, va_list ap)
  44. {
  45. fprintf(stderr, "%s: error: ", argv0);
  46. if(fmt) vfprintf(stderr, fmt, ap);
  47. putc('\n', stderr);
  48. exit(status);
  49. }
  50. void
  51. utils_warn(const char *fmt, ...)
  52. {
  53. va_list ap;
  54. va_start(ap, fmt);
  55. utils_vwarn(fmt, ap);
  56. va_end(ap);
  57. }
  58. void
  59. utils_warnx(const char *fmt, ...)
  60. {
  61. va_list ap;
  62. va_start(ap, fmt);
  63. utils_vwarnx(fmt, ap);
  64. va_end(ap);
  65. }
  66. _Noreturn void
  67. utils_err(int status, const char *fmt, ...)
  68. {
  69. va_list ap;
  70. va_start(ap, fmt);
  71. utils_verr(status, fmt, ap);
  72. va_end(ap);
  73. }
  74. _Noreturn void
  75. utils_errx(int status, const char *fmt, ...)
  76. {
  77. va_list ap;
  78. va_start(ap, fmt);
  79. utils_verrx(status, fmt, ap);
  80. va_end(ap);
  81. }