summaryrefslogtreecommitdiff
path: root/lib/libc/stdio/fputc.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/stdio/fputc.c')
-rw-r--r--lib/libc/stdio/fputc.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/libc/stdio/fputc.c b/lib/libc/stdio/fputc.c
new file mode 100644
index 00000000..c544d5dd
--- /dev/null
+++ b/lib/libc/stdio/fputc.c
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <io.h>
+
+int fputc(int c, FILE *stream)
+{
+ if (!stream) {
+ errno = EINVAL;
+ return EOF;
+ }
+
+ // Special case for string buffer operations (snprintf)
+ // When fd is -1, we're writing to a string buffer
+ if (stream->fd == -1 && stream->buf != NULL) {
+ // Check if there's space (leave room for null terminator)
+ if (stream->buf_len >= stream->buf_size - 1) {
+ return EOF;
+ }
+
+ stream->buf[stream->buf_len++] = (char)c;
+ return (unsigned char)c;
+ }
+
+ // For regular file operations, use fwrite
+ return fwrite(&c, 1, 1, stream) ? c : EOF;
+}