From: Guillem Jover Date: Fri, 15 May 2009 19:23:03 +0000 (+0200) Subject: Change fgetln to return the correct length value X-Git-Tag: 0.1.0~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=deb9f56ceb560f96448ff9bfa1befdf7ed9849de;p=thirdparty%2Flibbsd.git 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. --- 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