From eb606d798b18be08e4a403132350b6dc350b522b Mon Sep 17 00:00:00 2001
From: Anton Kling <anton@kling.gg>
Date: Sun, 23 Jun 2024 12:42:37 +0200
Subject: LibC: Include delim in getdelim if it was seen

---
 userland/libc/stdio/getdelim.c | 7 +++----
 userland/test/test.c           | 7 ++++---
 2 files changed, 7 insertions(+), 7 deletions(-)

(limited to 'userland')

diff --git a/userland/libc/stdio/getdelim.c b/userland/libc/stdio/getdelim.c
index 3a6f23e..606a545 100644
--- a/userland/libc/stdio/getdelim.c
+++ b/userland/libc/stdio/getdelim.c
@@ -10,10 +10,6 @@ size_t getdelim(char **lineptr, size_t *n, int delimiter, FILE *stream) {
   for (;;) {
     char c;
     if (0 == fread(&c, 1, 1, stream)) {
-      s++;
-      break;
-    }
-    if (c == delimiter) {
       break;
     }
     if (s + 1 >= *n) {
@@ -22,6 +18,9 @@ size_t getdelim(char **lineptr, size_t *n, int delimiter, FILE *stream) {
     }
     (*lineptr)[s] = c;
     s++;
+    if (c == delimiter) {
+      break;
+    }
   }
   (*lineptr)[s] = '\0';
   return s;
diff --git a/userland/test/test.c b/userland/test/test.c
index 28e84d9..9013f1e 100644
--- a/userland/test/test.c
+++ b/userland/test/test.c
@@ -723,15 +723,16 @@ void getline_test(void) {
       size_t n;
       n = 256;
       getline(&line_buffer, &n, fp);
-      assert(0 == strcmp("line1", line_buffer));
+      assert(0 == strcmp("line1\n", line_buffer));
       n = 256;
       getline(&line_buffer, &n, fp);
-      assert(0 == strcmp("line2", line_buffer));
+      assert(0 == strcmp("line2\n", line_buffer));
       n = 256;
       getline(&line_buffer, &n, fp);
-      assert(0 == strcmp("foo", line_buffer));
+      assert(0 == strcmp("foo\n", line_buffer));
       n = 256;
       getline(&line_buffer, &n, fp);
+      printf("line_buffer: %s\n", line_buffer);
       assert(0 == strcmp("bar", line_buffer));
     }
     free(buffer);
-- 
cgit v1.2.3