From c415a6f2f3f43d81f07f99e633ea6d9f2a4b5ed7 Mon Sep 17 00:00:00 2001 From: z00538436 Date: Mon, 24 Aug 2020 23:23:39 +0800 Subject: [PATCH] TicketNo:DTS2020090109976 Description:fix libc(user&kernel) printf func Team:OTHERS Feature or Bugfix:Bugfix Binary Source:NA PrivateCode(Yes/No):No Change-Id: I78d37cd46a65fcbac889e3be76ea6a4360e6e8a9 Reviewed-on: http://mgit-tm.rnd.huawei.com/10583123 Tested-by: public jenkins Reviewed-by: maguangyao 00383488 Reviewed-by: zhushengle 00451061 Reviewed-by: jianghan 00316535 Reviewed-by: shenwei 00579521 --- arch/arm/syscall_arch.h | 7 ------- kernel/src/stdio/__stdout_write.c | 18 +++++++++++------- kernel/src/stdio/fwrite.c | 2 ++ src/env/__libc_start_main.c | 1 - 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/arch/arm/syscall_arch.h b/arch/arm/syscall_arch.h index 4dcd0a97..9b5a5249 100644 --- a/arch/arm/syscall_arch.h +++ b/arch/arm/syscall_arch.h @@ -99,17 +99,10 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo } #define VDSO_USEFUL -#if 0 -#define VDSO_CGT32_SYM "__vdso_clock_gettime" -#define VDSO_CGT32_VER "LINUX_2.6" -#define VDSO_CGT_SYM "__vdso_clock_gettime64" -#define VDSO_CGT_VER "LINUX_2.6" -#else #define VDSO_CGT32_SYM "VdsoClockGettime" #define VDSO_CGT32_VER "OHOS" #define VDSO_CGT_SYM "VdsoClockGettime" #define VDSO_CGT_VER "OHOS" -#endif #define SYSCALL_FADVISE_6_ARG diff --git a/kernel/src/stdio/__stdout_write.c b/kernel/src/stdio/__stdout_write.c index 2507fc5e..f64f59d9 100644 --- a/kernel/src/stdio/__stdout_write.c +++ b/kernel/src/stdio/__stdout_write.c @@ -1,13 +1,17 @@ #include "stdio_impl.h" #include -#include "fs/fs.h" -#include "fs/file.h" size_t __stdout_write(FILE *f, const unsigned char *buf, size_t len) { - struct winsize wsz; - f->write = __stdio_write; - if (!(f->flags & F_SVB) && ioctl(f->fd, TIOCGWINSZ, &wsz)) - f->lbf = -1; - return __stdio_write(f, buf, len); + struct winsize wsz; + if (!(f->flags & F_SVB) && ioctl(f->fd, TIOCGWINSZ, &wsz)) { + f->lbf = EOF; + } else { + f->lbf = '\n'; + f->write = __stdio_write; + f->wpos = f->wbase = f->buf; + f->wend = f->buf + f->buf_size; + } + if (len == -1) return 0; + return __stdio_write(f, buf, len); } diff --git a/kernel/src/stdio/fwrite.c b/kernel/src/stdio/fwrite.c index c90d39d4..7f878109 100644 --- a/kernel/src/stdio/fwrite.c +++ b/kernel/src/stdio/fwrite.c @@ -13,6 +13,8 @@ size_t __fwritex(const unsigned char *restrict s, size_t l, FILE *restrict f) if (l > f->wend - f->wpos) return f->write(f, s, l); + if (f->lbf == EOF) f->write(f, s, -1); + if (f->lbf >= 0) { /* Match /^(.*\n|)/ */ for (i=l; i && s[i-1] != '\n'; i--); diff --git a/src/env/__libc_start_main.c b/src/env/__libc_start_main.c index d52b17ee..9f0fec0e 100644 --- a/src/env/__libc_start_main.c +++ b/src/env/__libc_start_main.c @@ -89,7 +89,6 @@ static int libc_start_main_stage2(int (*main)(int,char **,char **), int argc, ch { char **envp = argv+argc+1; __libc_start_init(); - setbuf(stdout, NULL); //set printf buff =0 enable printf __sig_init(); /* Pass control to the application */ -- GitLab