tool-stdio.inline.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #ifndef AFUN_STDIO_INLINE_H
  2. #define AFUN_STDIO_INLINE_H
  3. #include "tool-stdio.h"
  4. namespace aFuntool {
  5. static bool clear_ferror(FILE *file) {
  6. return ferror(file) && (clearerr(file), ferror(file));
  7. }
  8. static bool clear_stdin() {
  9. return (ferror(stdin) || feof(stdin)) &&
  10. (clearerr(stdin), (ferror(stdin) || feof(stdin)));
  11. }
  12. }
  13. #ifdef aFunWIN32_NO_CYGWIN
  14. namespace aFuntool {
  15. static int fputs_stdout(const char *str) {
  16. return fputs_std_(str, stdout);
  17. }
  18. static int fputs_stderr(const char *str) {
  19. return fputs_std_(str, stderr);
  20. }
  21. static size_t vprintf_stderr(size_t buf_len, const char *format, va_list ap) {
  22. return vprintf_std_(stderr, buf_len, format, ap);
  23. }
  24. static size_t vprintf_stdout(size_t buf_len, const char *format, va_list ap) {
  25. return vprintf_std_(stdout, buf_len, format, ap);
  26. }
  27. static size_t printf_stdout(size_t buf_len, const char *format, ...) {
  28. va_list ap;
  29. va_start(ap, format);
  30. size_t re = vprintf_std_(stdout, buf_len, format, ap);
  31. va_end(ap);
  32. return re;
  33. }
  34. static size_t printf_stderr(size_t buf_len, const char *format, ...) {
  35. va_list ap;
  36. va_start(ap, format);
  37. size_t re = vprintf_std_(stderr, buf_len, format, ap);
  38. va_end(ap);
  39. return re;
  40. }
  41. }
  42. #else
  43. namespace aFuntool {
  44. static int fgetc_stdin(){
  45. return fgetc(stdout);
  46. }
  47. static int fgets_stdin_(char *buf, int len, FILE *file){
  48. return fgets(buf, len, file) != nullptr;
  49. }
  50. static int fungetc_stdin(char ch){
  51. return ungetc(ch, stdin);
  52. }
  53. static int fputs_stdout(const char *str){
  54. return fputs(str, stdout);
  55. }
  56. static int fputs_stderr(const char *str){
  57. return fputs(str, stderr);
  58. }
  59. static int vprintf_stdout(size_t, const char *format, va_list ap){
  60. return vfprintf(stdout, format, ap);
  61. }
  62. static int vprintf_stderr(size_t, const char *format, va_list ap){
  63. return vfprintf(stderr, format, ap);
  64. }
  65. static size_t printf_stdout(size_t, const char *format, ...) {
  66. va_list ap;
  67. va_start(ap, format);
  68. size_t re = vfprintf(stdout, format, ap);
  69. va_end(ap);
  70. return re;
  71. }
  72. static size_t printf_stderr(size_t, const char *format, ...) {
  73. va_list ap;
  74. va_start(ap, format);
  75. size_t re = vfprintf(stderr, format, ap);
  76. va_end(ap);
  77. return re;
  78. }
  79. }
  80. #endif
  81. #endif //AFUN_STDIO_INLINE_H