projects
/
cascardo
/
declara.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Suporta rendimentos isentos e exclusivos de dependentes.
[cascardo/declara.git]
/
lib
/
isento.c
diff --git
a/lib/isento.c
b/lib/isento.c
index
f078804
..
4e7540e
100644
(file)
--- a/
lib/isento.c
+++ b/
lib/isento.c
@@
-77,7
+77,7
@@
static int isento_cmp(void *p1, void *p2)
return 0;
}
return 0;
}
-static struct isento * isento_new(char **args)
+static struct isento * isento_new(char **args
, int argc
)
{
struct isento *isento;
int r = 0;
{
struct isento *isento;
int r = 0;
@@
-96,6
+96,15
@@
static struct isento * isento_new(char **args)
isento_free(isento);
return NULL;
}
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;
}
return isento;
}
@@
-103,11
+112,15
@@
static int run_isento(struct declaracao *dec, char **args, int argc)
{
struct isento *isento;
int r;
{
struct isento *isento;
int r;
- if (argc != 5)
+ if (argc != 5
&& argc != 6
)
return -EINVAL;
return -EINVAL;
- isento = isento_new(args);
+ isento = isento_new(args
, argc
);
if (!isento)
return -ENOMEM;
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);
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++)
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 = {
}
static struct cmd cmd_isento = {