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

Antonio Terceiro terceiro en softwarelivre.org
Lun Abr 30 01:33:06 UTC 2018


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



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