From 977ee87b831a211e265d78c0f33c2e5804071d29 Mon Sep 17 00:00:00 2001 From: Antonio Terceiro Date: Sun, 29 Apr 2018 22:33:06 -0300 Subject: [PATCH] declara: retorna 0 se, e somente se, houverem erros MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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.20.1