#include "gom.h"
#include "gom_internal.h"
-void gom_default_callback (Gedcom_elt elt, Gedcom_ctxt parent, int level, char* tag,
- char* raw_value, int parsed_tag);
+void gom_default_callback (Gedcom_elt elt, Gedcom_ctxt parent, int level,
+ char* tag, char* raw_value, int parsed_tag);
void gom_cleanup()
{
source_event_subscribe();
source_description_subscribe();
- atexit(gom_cleanup);
+ if (atexit(gom_cleanup) != 0) {
+ gedcom_warning(_("Could not register gom cleanup function"));
+ }
return gedcom_parse_file(file_name);
}
Gom_ctxt make_gom_ctxt(int ctxt_type, OBJ_TYPE obj_type, void *ctxt_ptr)
{
Gom_ctxt ctxt = (Gom_ctxt)malloc(sizeof(struct Gom_ctxt_struct));
- ctxt->ctxt_type = ctxt_type;
- ctxt->obj_type = obj_type;
- ctxt->ctxt_ptr = ctxt_ptr;
+ if (! ctxt)
+ MEMORY_ERROR;
+ else {
+ ctxt->ctxt_type = ctxt_type;
+ ctxt->obj_type = obj_type;
+ ctxt->ctxt_ptr = ctxt_ptr;
+ }
return ctxt;
}
void destroy_gom_ctxt(Gom_ctxt ctxt)
{
- free(ctxt);
+ SAFE_FREE(ctxt);
}
void gom_cast_error(char* file, int line, OBJ_TYPE expected, OBJ_TYPE found)
abort();
}
+void gom_mem_error(char *filename, int line)
+{
+ gedcom_error(_("Could not allocate memory at %s, %d"), filename, line);
+}
+
void gom_unexpected_context(char* file, int line, OBJ_TYPE found)
{
gedcom_warning(_("Internal error: Unexpected context at %s, line %d: %d"),
file, line, found);
}
+void gom_no_context(char* file, int line)
+{
+ gedcom_warning(_("Internal error: No context at %s, line %d"),
+ file, line);
+}
+
void gom_default_callback (Gedcom_elt elt, Gedcom_ctxt parent, int level, char* tag,
char* raw_value, int parsed_tag)
{
if (type == WITH_NL)
len++;
newp = (char*) realloc(str1, len);
- if (newp == NULL) {
- free (str1);
+ if (newp == NULL)
return NULL;
- }
wp = newp + len1;
str1 = newp;
if (type == WITH_NL)
{
struct date_value* dv_ptr;
dv_ptr = (struct date_value*) malloc(sizeof(struct date_value));
- memcpy(dv_ptr, &dv, sizeof(struct date_value));
+ if (! dv_ptr)
+ MEMORY_ERROR;
+ else {
+ memcpy(dv_ptr, &dv, sizeof(struct date_value));
+ }
return dv_ptr;
}
{
struct age_value* age_ptr;
age_ptr = (struct age_value*) malloc(sizeof(struct age_value));
- memcpy(age_ptr, &age, sizeof(struct age_value));
+ if (! age_ptr)
+ MEMORY_ERROR;
+ else {
+ memcpy(age_ptr, &age, sizeof(struct age_value));
+ }
return age_ptr;
}