[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