From c8998127732765aabba020ece5e42befc6f1e305 Mon Sep 17 00:00:00 2001
From: dzwdz
Date: Wed, 27 Jul 2022 21:32:39 +0200
Subject: user/libc: a shitty fgets()

---
 src/user/lib/file.c          | 12 ++++++++++++
 src/user/lib/include/stdio.h |  1 +
 2 files changed, 13 insertions(+)

(limited to 'src/user/lib')

diff --git a/src/user/lib/file.c b/src/user/lib/file.c
index bd6bc56..a26c8bb 100644
--- a/src/user/lib/file.c
+++ b/src/user/lib/file.c
@@ -143,6 +143,18 @@ size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restri
 	return nitems;
 }
 
+char *fgets(char *buf, int size, FILE *f) {
+	char c = '\0';
+	size_t pos = 0;
+	while (pos < (size-1) && c != '\n' && fread(&c, 1, 1, f))
+		buf[pos++] = c;
+	buf[pos++] = '\0';
+
+	if (f->eof && pos == 1) return NULL;
+	if (f->error) return NULL;
+	return buf;
+}
+
 int fseek(FILE *f, long offset, int whence) {
 	if (fflush(f))
 		return -1;
diff --git a/src/user/lib/include/stdio.h b/src/user/lib/include/stdio.h
index eb59793..bf9e09e 100644
--- a/src/user/lib/include/stdio.h
+++ b/src/user/lib/include/stdio.h
@@ -25,6 +25,7 @@ int fflush(FILE *f);
 
 size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict);
 size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict);
+char *fgets(char *buf, int size, FILE *f);
 int fseek(FILE *f, long offset, int whence);
 
 int feof(FILE *);
-- 
cgit v1.2.3