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.
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#define _GNU_SOURCE
#include "declaracao.h"
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <stdarg.h>
#include "list.h"
#include "conjuge.h"
#include "sistema.h"
dec->devido = 0;
dec->restituicao = 0;
dec->tipo = SIMPLES;
+ dec->error = NULL;
return dec;
out_totais:
list_free(dec->dependentes, dependente_free);
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);
+}
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