X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fdeclara.git;a=blobdiff_plain;f=lib%2Fisento.c;h=4e7540e304c86e8129ad4354c53194396083bf0d;hp=f07880440693ac75545674bb93f26735f0abaa1f;hb=fd1f6192290c7f2f3b8d0e136776c3aa0a9d0a16;hpb=e86e399877de703140d16f2caaf366ebc08ff474 diff --git a/lib/isento.c b/lib/isento.c index f078804..4e7540e 100644 --- a/lib/isento.c +++ b/lib/isento.c @@ -77,7 +77,7 @@ static int isento_cmp(void *p1, void *p2) return 0; } -static struct isento * isento_new(char **args) +static struct isento * isento_new(char **args, int argc) { struct isento *isento; int r = 0; @@ -96,6 +96,15 @@ static struct isento * isento_new(char **args) isento_free(isento); return NULL; } + if (argc == 6) { + r = set_int(&args[4], 2, &isento->dependente); + } else { + isento->dependente = 0; + } + if (r < 0 || isento->dependente < 0) { + isento_free(isento); + return NULL; + } return isento; } @@ -103,11 +112,15 @@ static int run_isento(struct declaracao *dec, char **args, int argc) { struct isento *isento; int r; - if (argc != 5) + if (argc != 5 && argc != 6) return -EINVAL; - isento = isento_new(args); + isento = isento_new(args, argc); if (!isento) return -ENOMEM; + if (isento->dependente > list_size(dec->dependentes)) { + isento_free(isento); + return -EINVAL; + } r = list_insert_ordered(&dec->isentos, isento, isento_cmp); if (r < 0) { isento_free(isento); @@ -126,8 +139,8 @@ void isento_salva(struct declaracao *dec, FILE *f) int i; struct isento *j; for (i = 0; j = list_get(dec->isentos, i); i++) - fprintf(f, "isento %d \"%s\" \"%s\" %lld\n", - j->codigo, j->cnpj, j->nome, j->valor); + fprintf(f, "isento %d \"%s\" \"%s\" %lld %d\n", + j->codigo, j->cnpj, j->nome, j->valor, j->dependente); } static struct cmd cmd_isento = {