Index | Thread | Search

From:
"Theo de Raadt" <deraadt@openbsd.org>
Subject:
Re: fparseln(3) and newlines
To:
tech@openbsd.org
Date:
Wed, 12 Nov 2025 10:17:07 -0700

Download raw body.

Thread
  • Jeremie Courreges-Anglas:

    fparseln(3) and newlines

    • Theo de Raadt:

      fparseln(3) and newlines

Bizzare.  Wonder what the history is.

OK

Jeremie Courreges-Anglas <jca@wxcvbn.org> wrote:

> This bugged me the last two times I looked at this function.
> I don't see why we should be looking for another "newline" character.
> getdelim(3) could let us use one single alternate character, but given
> the signature of fparseln(3) I don't see us shoehorning that "feature"
> that probably nobody would find useful.
> 
> So here's a diff to strip the related code and XXX.  ok?
> 
> 
> Index: fparseln.c
> ===================================================================
> RCS file: /cvs/src/lib/libutil/fparseln.c,v
> diff -u -p -r1.8 fparseln.c
> --- fparseln.c	4 Jan 2023 13:00:11 -0000	1.8
> +++ fparseln.c	1 Nov 2025 15:15:05 -0000
> @@ -66,7 +66,7 @@ fparseln(FILE *fp, size_t *size, size_t 
>      int flags)
>  {
>  	static const char dstr[3] = { '\\', '\\', '#' };
> -	char	*buf = NULL, *ptr, *cp, esc, con, nl, com;
> +	char	*buf = NULL, *ptr, *cp, esc, con, com;
>  	size_t	s, len = 0;
>  	int	cnt = 1;
>  
> @@ -77,12 +77,6 @@ fparseln(FILE *fp, size_t *size, size_t 
>  	con = str[1];
>  	com = str[2];
>  
> -	/*
> -	 * XXX: it would be cool to be able to specify the newline character,
> -	 * but unfortunately, fgetln does not let us
> -	 */
> -	nl  = '\n';
> -
>  	while (cnt) {
>  		cnt = 0;
>  
> @@ -101,10 +95,10 @@ fparseln(FILE *fp, size_t *size, size_t 
>  				}
>  		}
>  
> -		if (s && nl) {		/* Check and eliminate newlines */
> +		if (s) {		/* Check and eliminate newlines */
>  			cp = &ptr[s - 1];
>  
> -			if (*cp == nl)
> +			if (*cp == '\n')
>  				s--;	/* forget newline */
>  		}
>  
> 
> -- 
> jca
>