Explorar o código

feat: 公开stdio_.c的函数

SongZihuan %!s(int64=3) %!d(string=hai) anos
pai
achega
d5c292a28d
Modificáronse 2 ficheiros con 21 adicións e 30 borrados
  1. 9 4
      include/tool/stdio_.h
  2. 12 26
      src/tool/stdio_.c

+ 9 - 4
include/tool/stdio_.h

@@ -14,11 +14,16 @@ AFUN_TOOL_EXPORT int fgetc_stdin(void);
 AFUN_TOOL_EXPORT char *fgets_stdin_(char *buf, size_t len);
 AFUN_TOOL_EXPORT int fungetc_stdin(int ch);
 
-AFUN_TOOL_EXPORT int fputs_stdout(char *str);
-AFUN_TOOL_EXPORT int fputs_stderr(char *str);
+AFUN_TOOL_EXPORT int fputs_std_(char *str, FILE *std);
+#define fputs_stdout(std) fputs_std_(std, stdout)
+#define fputs_stderr(std) fputs_std_(std, stderr)
+
+
+AFUN_TOOL_EXPORT size_t vprintf_std_(FILE *std, size_t buf_len, char *format, va_list ap);
+#define vprintf_stderr(len, format, ap) vprintf_std_(stderr, len, format, ap)
+#define vprintf_stdout(len, format, ap) vprintf_std_(stdout, len, format, ap)
+
 
-AFUN_TOOL_EXPORT size_t vprintf_stdout(size_t buf_len, char *format, va_list ap);
-AFUN_TOOL_EXPORT size_t vprintf_stderr(size_t buf_len, char *format, va_list ap);
 AFUN_TOOL_EXPORT size_t printf_stdout(size_t buf_len, char *format, ...);
 AFUN_TOOL_EXPORT size_t printf_stderr(size_t buf_len, char *format, ...);
 

+ 12 - 26
src/tool/stdio_.c

@@ -335,7 +335,13 @@ bool checkStdin(void) {
     return true;
 }
 
-static int fputs_std_(char *str, FILE *std) {
+int fputs_std_(char *str, FILE *std) {
+    if (std == NULL)
+        return 0;
+
+    if (!_isatty(_fileno(std)))
+        return fputs(str, std);
+
     UINT code_page = GetConsoleCP();
     char *wstr = NULL;
     int re = EOF;
@@ -347,21 +353,13 @@ static int fputs_std_(char *str, FILE *std) {
     return re;
 }
 
-int fputs_stdout(char *str) {
-    if (_isatty(_fileno(stdout)))
-        return fputs_std_(str, stdout);
-    fputs(str, stdout);
-    return 1;
-}
+size_t vprintf_std_(FILE *std, size_t buf_len, char *format, va_list ap) {
+    if (std == NULL)
+        return 0;
 
-int fputs_stderr(char *str) {
-    if (_isatty(_fileno(stderr)))
-        return fputs_std_(str, stderr);
-    fputs(str, stderr);
-    return 1;
-}
+    if (!_isatty(_fileno(std)))
+        return vfprintf(std, format, ap);
 
-static size_t vprintf_std_(FILE *std, size_t buf_len, char *format, va_list ap) {
     if (buf_len == 0)
         buf_len = 1024;
     buf_len += 10;  // 预留更多位置
@@ -373,18 +371,6 @@ static size_t vprintf_std_(FILE *std, size_t buf_len, char *format, va_list ap)
     return re;
 }
 
-size_t vprintf_stdout(size_t buf_len, char *format, va_list ap) {
-    if (_isatty(_fileno(stdout)))
-        return vprintf_std_(stdout, buf_len, format, ap);
-    return vfprintf(stdout, format, ap);
-}
-
-size_t vprintf_stderr(size_t buf_len, char *format, va_list ap) {
-    if (_isatty(_fileno(stderr)))
-        return vprintf_std_(stderr, buf_len, format, ap);
-    return vfprintf(stderr, format, ap);
-}
-
 size_t printf_stdout(size_t buf_len, char *format, ...) {
     va_list ap;
     va_start(ap, format);