[PATCH 2/3] declara: retorna 0 se, e somente se, houverem erros

Thadeu Lima de Souza Cascardo cascardo en cascardo.eti.br
Dom Mayo 13 14:13:47 UTC 2018


On Sun, Apr 29, 2018 at 10:33:06PM -0300, Antonio Terceiro wrote:
> getline() com certeza vai retornar -1 quando o arquivo acabar, então não
> se pode usar seu valor de retorno como status de saída do programa como
> um todo.
> 
> Além disso, como `r` é sobrescrito a cada iteração, precisamos de uma
> outra variável pra guardar um valor de saída. Caso contrário, se a
> execução do ultimo comando no arquivo for bem sucedido, o programa vai
> retornar 0 mesmo se houver erros anteriormente.
> ---
>  src/declara.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/src/declara.c b/src/declara.c
> index f5faa00..995dc31 100644
> --- a/src/declara.c
> +++ b/src/declara.c
> @@ -37,21 +37,23 @@ static int fileprocess(struct declaracao *dec, int fd)
>  	size_t lsz = 0;
>  	FILE *f;
>  	int r;
> +	int rc = 0;
>  	int n = 1;
>  	f = fdopen(fd, "r");
>  	if (!f)
>  		return -errno;
> -	while ((r = getline(&line, &lsz, f)) > 0) {
> +	while (getline(&line, &lsz, f) > 0) {
>  		r = cmd_run(dec, line);
>  		if (r < 0) {
>  			fprintf(stderr, "Não foi possível executar comando na linha %d: %s\n",
>  				n, dec->error ?: strerror(-r));
> +			rc = r;
>  		}
>  		n++;
>  	}
>  	free(line);
>  	fclose(f);
> -	return r;
> +	return rc;
>  }
>  
>  static int ttyprocess(struct declaracao *dec)
> -- 
> 2.17.0

Por causa da codificação do e-mail em ISO-8859-1, tive que fazer uma boa
massagem no patch pra conseguir aplicá-lo.

Abraços.
Cascardo.


Más información sobre la lista de distribución Softwares-impostos