]> git.ipfire.org Git - thirdparty/libbsd.git/commitdiff
Change fgetln to return the correct length value
authorGuillem Jover <guillem@hadrons.org>
Fri, 15 May 2009 19:23:03 +0000 (21:23 +0200)
committerGuillem Jover <guillem@hadrons.org>
Fri, 15 May 2009 19:23:03 +0000 (21:23 +0200)
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>
src/fgetln.c

index e59028b6e1e1e626dfb8b3997ba1fb9c1d4a497b..2e6eac91d156745b242a76378b4412cea6db8c3e 100644 (file)
@@ -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