misc.c 970 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <stdio.h>
  2. #include <stdarg.h>
  3. #include "misc.h"
  4. char *prgname = 0;
  5. extern char *strrchr(const char *, int);
  6. NORETURN(exit(int));
  7. void setprgname(char *str)
  8. {
  9. char *x = strrchr(str, '/');
  10. prgname = x ? x+1 : str;
  11. }
  12. static void print_prgname(void)
  13. {
  14. if (prgname && *prgname)
  15. fprintf(stderr, "%s: ", prgname);
  16. }
  17. void error(const char *str, ...)
  18. {
  19. va_list args;
  20. va_start(args, str);
  21. print_prgname();
  22. vfprintf(stderr, str, args);
  23. fputc('\n', stderr);
  24. }
  25. void ioerror(const char *str)
  26. {
  27. print_prgname();
  28. perror(str);
  29. }
  30. void fatal(const char *str, ...)
  31. {
  32. va_list args;
  33. va_start(args, str);
  34. print_prgname();
  35. vfprintf(stderr, str, args);
  36. fputc('\n', stderr);
  37. exit(2);
  38. }
  39. void fatal_ioerror(const char *str)
  40. {
  41. print_prgname();
  42. perror(str);
  43. exit(2);
  44. }
  45. void out_of_mem(int size)
  46. {
  47. if (size > 0)
  48. fatal("out of memory allocating %d bytes.", size);
  49. fatal("out of memory.");
  50. }