Commit deb9f56ceb560f96448ff9bfa1befdf7ed9849de

Guillem Jover 2009-05-15T21:23:03

Change fgetln to return the correct length value Set len to 0 on error conditions to mimmic FreeBSD behaviour, and return the amount of read characters on success, instead of the allocated size by getline. Reported-by: Jief L. <jief1.l@gmail.com>

diff --git a/src/fgetln.c b/src/fgetln.c
index e59028b..2e6eac9 100644
--- a/src/fgetln.c
+++ b/src/fgetln.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2005 Hector Garcia Alvarez
- * Copyright (C) 2005, 2008 Guillem Jover
+ * Copyright (C) 2005, 2008, 2009 Guillem Jover
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -35,16 +35,17 @@ char *
 fgetln (FILE *stream, size_t *len)
 {
 	char *line = NULL;
+	size_t line_len = 0;
 	ssize_t nread;
 
-	nread = getline (&line, len, stream);
-	if (nread == -1)
+	nread = getline(&line, &line_len, stream);
+	if (nread == -1) {
+		*len = 0;
 		return NULL;
-
-	/* Get rid of the trailing \0, fgetln does not have it. */
-	(*len)--;
-
-	return line;
+	} else {
+		*len = (size_t)nread;
+		return line;
+	}
 }
 #endif