aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--str.c14
2 files changed, 12 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index 00e7e1f..905bb61 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+tags
/test_*
*.o
*.d
diff --git a/str.c b/str.c
index a8c2200..e8616aa 100644
--- a/str.c
+++ b/str.c
@@ -153,9 +153,17 @@ char *fgetline(FILE *fp) {
init_str_builder(&sb);
while (true) {
int c = fgetc(fp);
- if (c == EOF && sb.size == 0) return NULL;
- if (c != EOF) str_builder_append_char(&sb, c);
- if (c == EOF || c == '\n') return sb.buf;
+ if (c == EOF && sb.size == 0) {
+ free(sb.buf);
+ return NULL;
+ }
+ if (c != EOF) {
+ str_builder_append_char(&sb, c);
+ }
+ if (c == EOF || c == '\n') {
+ str_builder_append_char(&sb, '\0');
+ return sb.buf;
+ }
}
return NULL;
}