From deb9f56ceb560f96448ff9bfa1befdf7ed9849de Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Fri, 15 May 2009 21:23:03 +0200 Subject: 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. --- src/fgetln.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src') 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 -- cgit v1.2.3