My slstatus configuration
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

86 linhas
1.2 KiB

  1. /* See LICENSE file for copyright and license details. */
  2. #include <errno.h>
  3. #include <stdarg.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include "util.h"
  8. char *argv0;
  9. static void
  10. verr(const char *fmt, va_list ap)
  11. {
  12. if (argv0 && strncmp(fmt, "usage", sizeof("usage") - 1)) {
  13. fprintf(stderr, "%s: ", argv0);
  14. }
  15. vfprintf(stderr, fmt, ap);
  16. if (fmt[0] && fmt[strlen(fmt) - 1] == ':') {
  17. fputc(' ', stderr);
  18. perror(NULL);
  19. } else {
  20. fputc('\n', stderr);
  21. }
  22. }
  23. void
  24. warn(const char *fmt, ...)
  25. {
  26. va_list ap;
  27. va_start(ap, fmt);
  28. verr(fmt, ap);
  29. va_end(ap);
  30. }
  31. void
  32. die(const char *fmt, ...)
  33. {
  34. va_list ap;
  35. va_start(ap, fmt);
  36. verr(fmt, ap);
  37. va_end(ap);
  38. exit(1);
  39. }
  40. const char *
  41. bprintf(const char *fmt, ...)
  42. {
  43. va_list ap;
  44. int ret;
  45. va_start(ap, fmt);
  46. if ((ret = vsnprintf(buf, sizeof(buf), fmt, ap)) < 0) {
  47. warn("vsnprintf:");
  48. } else if ((size_t)ret >= sizeof(buf)) {
  49. warn("vsnprintf: Output truncated");
  50. }
  51. va_end(ap);
  52. return buf;
  53. }
  54. int
  55. pscanf(const char *path, const char *fmt, ...)
  56. {
  57. FILE *fp;
  58. va_list ap;
  59. int n;
  60. if (!(fp = fopen(path, "r"))) {
  61. warn("fopen '%s':", path);
  62. return -1;
  63. }
  64. va_start(ap, fmt);
  65. n = vfscanf(fp, fmt, ap);
  66. va_end(ap);
  67. fclose(fp);
  68. return (n == EOF) ? -1 : n;
  69. }