summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-07-27 23:47:14 +0800
committerruki <[email protected]>2022-07-27 21:46:35 +0800
commit7e53425e7c9c804a7a2009dbf41cff56f6024964 (patch)
treeabace78c58fb844155efde435c18af7a3901832d
parent154a8add02e1df42beab6e5073f97298d924b33e (diff)
improve stdio
-rw-r--r--core/src/xmake/io/stdfile.c29
1 files changed, 9 insertions, 20 deletions
diff --git a/core/src/xmake/io/stdfile.c b/core/src/xmake/io/stdfile.c
index 549b01112..4b830ccac 100644
--- a/core/src/xmake/io/stdfile.c
+++ b/core/src/xmake/io/stdfile.c
@@ -34,6 +34,8 @@
# include "iscygpty.c"
#else
# include <unistd.h>
+# include <sys/types.h>
+# include <sys/stat.h>
#endif
/* //////////////////////////////////////////////////////////////////////////////////////
@@ -84,28 +86,15 @@ static tb_void_t xm_io_stdfile_init_buffer(tb_size_t type)
#if defined(TB_CONFIG_OS_WINDOWS)
// TODO
#else
- tb_int_t size = 0;
tb_char_t data[256];
- switch (type)
+ if (tb_environment_first("XMAKE_STDOUT_LINEFLUSH", data, sizeof(data)))
{
- case XM_IO_FILE_TYPE_STDIN:
- {
- if (tb_environment_first("XMAKE_STDIN_NBUF", data, sizeof(data)) && ((size = tb_stoi32(data)) >= 0))
- setvbuf(stdin, tb_null, _IONBF, size);
- }
- break;
- case XM_IO_FILE_TYPE_STDOUT:
- {
- if (tb_environment_first("XMAKE_STDOUT_NBUF", data, sizeof(data)) && ((size = tb_stoi32(data)) >= 0))
- setvbuf(stdout, tb_null, _IONBF, size);
- }
- break;
- case XM_IO_FILE_TYPE_STDERR:
- {
- if (tb_environment_first("XMAKE_STDERR_NBUF", data, sizeof(data)) && ((size = tb_stoi32(data)) >= 0))
- setvbuf(stderr, tb_null, _IONBF, size);
- }
- break;
+ struct stat stats;
+ tb_int_t size = BUFSIZ;
+ int fileno(FILE*);
+ if (fstat(fileno(stdout), &stats) != -1)
+ size = stats.st_blksize;
+ setvbuf(stdout, tb_null, _IOLBF, size);
}
#endif
}