diff options
-rw-r--r-- | lib/libutils/isoc/fp.c | 16 | ||||
-rw-r--r-- | lib/libutils/isoc/fputc.c | 15 | ||||
-rw-r--r-- | lib/libutils/isoc/fputs.c | 17 | ||||
-rw-r--r-- | lib/libutils/isoc/fwrite.c | 22 | ||||
-rw-r--r-- | lib/libutils/isoc/include/stdio.h | 16 | ||||
-rw-r--r-- | lib/libutils/isoc/include/unistd.h | 3 | ||||
-rw-r--r-- | lib/libutils/isoc/sub.mk | 8 | ||||
-rw-r--r-- | lib/libutils/isoc/write.c | 16 |
8 files changed, 113 insertions, 0 deletions
diff --git a/lib/libutils/isoc/fp.c b/lib/libutils/isoc/fp.c new file mode 100644 index 00000000..ee7445bf --- /dev/null +++ b/lib/libutils/isoc/fp.c @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: BSD-2-Clause +/* + * Copyright (c) 2020, Huawei Technologies Co., Ltd + */ + +#include <stdio.h> + +struct _FILE { + char dummy; +}; + +static struct _FILE _fake_stdout; +static struct _FILE _fake_stderr; + +FILE *stdout = &_fake_stdout; +FILE *stderr = &_fake_stderr; diff --git a/lib/libutils/isoc/fputc.c b/lib/libutils/isoc/fputc.c new file mode 100644 index 00000000..3f154d75 --- /dev/null +++ b/lib/libutils/isoc/fputc.c @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: BSD-2-Clause +/* + * Copyright (c) 2020, Huawei Technologies Co., Ltd + */ + +#include <stdio.h> +#include <stdlib.h> + +int fputc(int c, FILE *stream) +{ + if (stream != stdout && stream != stderr) + abort(); + + return putchar(c); +} diff --git a/lib/libutils/isoc/fputs.c b/lib/libutils/isoc/fputs.c new file mode 100644 index 00000000..1c9cd873 --- /dev/null +++ b/lib/libutils/isoc/fputs.c @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: BSD-2-Clause +/* + * Copyright (c) 2020, Huawei Technologies Co., Ltd + */ + +#include <stdio.h> +#include <stdlib.h> +#include <trace.h> + +int fputs(const char *s, FILE *stream) +{ + if (stream != stdout && stream != stderr) + abort(); + + trace_ext_puts(s); + return 0; +} diff --git a/lib/libutils/isoc/fwrite.c b/lib/libutils/isoc/fwrite.c new file mode 100644 index 00000000..0e8fee9f --- /dev/null +++ b/lib/libutils/isoc/fwrite.c @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: BSD-2-Clause +/* + * Copyright (c) 2020, Huawei Technologies Co., Ltd + */ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) +{ + int fd = 0; + + if (stream == stdout) + fd = 1; + else if (stream == stderr) + fd = 2; + else + abort(); + + return write(fd, ptr, size * nmemb); +} diff --git a/lib/libutils/isoc/include/stdio.h b/lib/libutils/isoc/include/stdio.h index ec545207..cc2ddf08 100644 --- a/lib/libutils/isoc/include/stdio.h +++ b/lib/libutils/isoc/include/stdio.h @@ -24,4 +24,20 @@ int vsnprintf (char *str, size_t size, const char *fmt, va_list ap) int puts(const char *str); int putchar(int c); +#ifndef __KERNEL__ + +extern FILE *stdout; +extern FILE *stderr; + +/* + * The functions below send their output synchronously to the secure console. + * They treat stdout and stderr the same, and will abort if stream is not one or + * the other. + */ + +int fputc(int c, FILE *stream); +int fputs(const char *s, FILE *stream); +size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); +#endif + #endif /*STDIO_H*/ diff --git a/lib/libutils/isoc/include/unistd.h b/lib/libutils/isoc/include/unistd.h index de10cba3..9c27f0a4 100644 --- a/lib/libutils/isoc/include/unistd.h +++ b/lib/libutils/isoc/include/unistd.h @@ -11,4 +11,7 @@ #define __ssize_t_defined typedef intptr_t ssize_t; +/* @fd must be 1 or 2. Writes to the secure console. */ +ssize_t write(int fd, const void *buf, size_t count); + #endif diff --git a/lib/libutils/isoc/sub.mk b/lib/libutils/isoc/sub.mk index 3811b916..e47836bf 100644 --- a/lib/libutils/isoc/sub.mk +++ b/lib/libutils/isoc/sub.mk @@ -28,5 +28,13 @@ srcs-y += isprint.c srcs-y += ispunct.c srcs-y += toupper.c +ifneq (,$(filter ta_%,$(sm))) +srcs-y += fp.c +srcs-y += fputc.c +srcs-y += fputs.c +srcs-y += fwrite.c +srcs-y += write.c +endif + subdirs-y += newlib subdirs-$(arch_arm) += arch/$(ARCH) diff --git a/lib/libutils/isoc/write.c b/lib/libutils/isoc/write.c new file mode 100644 index 00000000..987de950 --- /dev/null +++ b/lib/libutils/isoc/write.c @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: BSD-2-Clause +/* + * Copyright (c) 2020, Huawei Technologies Co., Ltd + */ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +ssize_t write(int fd, const void *buf, size_t count) +{ + if (fd != 1 && fd != 2) + abort(); + + return printf("%*s", (int)count, (char *)buf); +} |