#include "list.h"
#include "util.h"
#include "totais.h"
+#include "attr.h"
void bem_free(void *pointer)
{
struct bem *bem = pointer;
if (bem->descricao)
free(bem->descricao);
- /* Imóvel */
- if (bem->logradouro)
- free(bem->logradouro);
- if (bem->numero)
- free(bem->numero);
- if (bem->complemento)
- free(bem->complemento);
- if (bem->bairro)
- free(bem->bairro);
- if (bem->cep)
- free(bem->cep);
- if (bem->uf)
- free(bem->uf);
- if (bem->municipio)
- free(bem->municipio);
- if (bem->matricula)
- free(bem->matricula);
- if (bem->registro)
- free(bem->registro);
- if (bem->cartorio)
- free(bem->cartorio);
-
+ if (bem->attr)
+ pmhash_del(bem->attr);
free(bem);
}
return 0;
}
-static struct bem * bem_new(char **args)
+static struct bem * bem_new(char **args, int argc)
{
struct bem *bem;
int r = 0;
+ int i;
bem = malloc(sizeof(*bem));
memset(bem, 0, sizeof(*bem));
- bem->descricao = strdup(args[2]);
- /* TODO: consertar set_int para funcionar como set_llong */
- r += set_int(args, 2, &bem->codigo);
- r += set_llong(args[3], &bem->valor_anterior);
- r += set_llong(args[4], &bem->valor);
- if (!bem->descricao) {
+ bem->attr = pmhash_new();
+ if (!bem->attr) {
bem_free(bem);
return NULL;
}
+
+ r += set_int(args[1], &bem->codigo);
+ r += set_string(args[2], &bem->descricao);
+ r += set_llong(args[3], &bem->valor_anterior);
+ r += set_llong(args[4], &bem->valor);
+
+ for (i = 5; i < argc; i++) {
+ printf("parsing arg %s\n", args[i]);
+ r = attr_parse(&bem->attr, args[i]);
+ if (r) {
+ bem_free(bem);
+ return NULL;
+ }
+ }
+
+ bem->dependente = 0; /* TODO */
+
if (r < 0 || bem->codigo < 0 ||
bem->valor_anterior < 0 || bem->valor < 0) {
bem_free(bem);
{
struct bem *bem;
int r;
- if (argc != 5)
+ if (argc < 5)
return -EINVAL;
- bem = bem_new(args);
+ bem = bem_new(args, argc);
if (!bem)
return -ENOMEM;
- r = list_insert_ordered(&dec->bens, bem, bem_cmp);
+ r = list_add(&dec->bens, bem);
if (r < 0) {
bem_free(bem);
return r;
{
int i;
struct bem *j;
- for (i = 0; j = list_get(dec->bens, i); i++)
- fprintf(f, "bem %d \"%s\" %lld %lld\n",
+ for (i = 0; j = list_get(dec->bens, i); i++) {
+ fprintf(f, "bem %d \"%s\" %lld %lld",
j->codigo, j->descricao, j->valor_anterior, j->valor);
+ //attr_printf(f, bem->attr);
+ fprintf(f, "\n");
+ }
}
static struct cmd cmd_bem = {