From 4a0df0c93d8abdc603310fdd3c553cbcf247fe36 Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Sun, 11 Dec 2016 23:42:17 -0200 Subject: [PATCH] =?utf8?q?Permite=20definir=20um=20erro=20ao=20processar?= =?utf8?q?=20a=20declara=C3=A7=C3=A3o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Uma mensagem de erro pode ser definida no contexto da declaração. Assim, o usuário pode ter mais detalhes sobre o erro ao processar algum comando. --- lib/declaracao.c | 17 +++++++++++++++++ lib/declaracao.h | 3 +++ 2 files changed, 20 insertions(+) diff --git a/lib/declaracao.c b/lib/declaracao.c index 7eef34c..fd3c998 100644 --- a/lib/declaracao.c +++ b/lib/declaracao.c @@ -16,9 +16,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#define _GNU_SOURCE #include "declaracao.h" +#include #include #include +#include #include "list.h" #include "conjuge.h" #include "sistema.h" @@ -59,6 +62,7 @@ struct declaracao * declaracao_new(int ano) dec->devido = 0; dec->restituicao = 0; dec->tipo = SIMPLES; + dec->error = NULL; return dec; out_totais: list_free(dec->dependentes, dependente_free); @@ -101,5 +105,18 @@ void declaracao_free(struct declaracao *dec) pmhash_del(dec->totais); conjuge_free(dec); sistema_free(dec); + if (dec->error) + free(dec->error); free(dec); } + +void dec_set_error(struct declaracao *dec, char *fmt, ...) +{ + va_list ap; + if (dec->error) + free(dec->error); + dec->error = NULL; + va_start(ap, fmt); + vasprintf(&dec->error, fmt, ap); + va_end(ap); +} diff --git a/lib/declaracao.h b/lib/declaracao.h index 5948878..e1f0f3d 100644 --- a/lib/declaracao.h +++ b/lib/declaracao.h @@ -61,9 +61,12 @@ struct declaracao { unsigned long hash; unsigned long rhash; int verbose; + char *error; }; struct declaracao * declaracao_new(int ano); void declaracao_free(struct declaracao *dec); +void dec_set_error(struct declaracao *dec, char *fmt, ...); + #endif -- 2.20.1