X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Fchange_date.c;h=417dbf0523400e13e2f535832f7ee7150be3d0eb;hb=bb2090762d3ae9355a04286c33b78d24736b783c;hp=1038df32ba577d1f8c0012dace9e6ca0980ab641;hpb=d70e2fdb664f6723cd8a1c131fdbeb39cb75d7be;p=gedcom-parse.git diff --git a/gom/change_date.c b/gom/change_date.c index 1038df3..417dbf0 100644 --- a/gom/change_date.c +++ b/gom/change_date.c @@ -46,13 +46,8 @@ Gedcom_ctxt sub_chan_start(_ELT_PARAMS_) if (! ctxt) NO_CONTEXT; else { - struct change_date *chan - = (struct change_date *)malloc(sizeof(struct change_date)); - if (! chan) - MEMORY_ERROR; - else { - memset (chan, 0, sizeof(struct change_date)); - + struct change_date *chan = SUB_MAKEFUNC(change_date)(); + if (chan) { switch (ctxt->ctxt_type) { case REC_FAM: ADDFUNC2_NOLIST(family,change_date)(ctxt, chan); break; @@ -78,6 +73,10 @@ Gedcom_ctxt sub_chan_start(_ELT_PARAMS_) return (Gedcom_ctxt)result; } +DEFINE_SUB_MAKEFUNC(change_date) +DEFINE_SUB_SETFUNC(change_date) +DEFINE_SUB_DELETEFUNC(change_date) + DEFINE_DATE_CB(change_date, sub_chan_date_start, date) DEFINE_STRING_CB(change_date, sub_chan_time_start, time) @@ -93,6 +92,14 @@ void change_date_subscribe() def_elt_end); } +void UNREFALLFUNC(change_date)(struct change_date* obj) +{ + if (obj) { + UNREFALLFUNC(note_sub)(obj->note); + UNREFALLFUNC(user_data)(obj->extra); + } +} + void CLEANFUNC(change_date)(struct change_date *chan) { if (chan) { @@ -104,33 +111,6 @@ void CLEANFUNC(change_date)(struct change_date *chan) SAFE_FREE(chan); } -struct change_date* gom_add_change_date(struct change_date** chan) -{ - struct change_date *obj = NULL; - if (chan && ! *chan) { - obj = (struct change_date*) malloc(sizeof(struct change_date)); - if (! obj) - MEMORY_ERROR; - else { - memset(obj, 0, sizeof(struct change_date)); - *chan = obj; - } - } - return obj; -} - -int gom_delete_change_date(struct change_date** chan) -{ - int result = 1; - if (chan && *chan) { - CLEANFUNC(change_date)(*chan); - free(*chan); - *chan = NULL; - result = 0; - } - return result; -} - int update_date(struct date_value** dv, struct tm* tm_ptr) { int result; @@ -165,7 +145,7 @@ int gom_update_timestamp(struct change_date** chan, time_t t) { int result = 1; if (chan) { - if (! *chan) gom_add_change_date(chan); + if (! *chan) gom_set_new_change_date(chan); if (*chan) { struct tm *tm_ptr = localtime(&t); result = 0;