declara: retorna 0 se, e somente se, houverem erros
authorAntonio Terceiro <terceiro@softwarelivre.org>
Mon, 30 Apr 2018 01:33:06 +0000 (22:33 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
Sun, 13 May 2018 14:04:12 +0000 (11:04 -0300)
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

index f5faa00..995dc31 100644 (file)
@@ -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)