X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Fchange_date.c;h=605039d8d2b28ea7f0f460c0beef51c660ce123a;hb=60162324857b1e8d84b8346d99f8b7dce07d0d40;hp=1038df32ba577d1f8c0012dace9e6ca0980ab641;hpb=d70e2fdb664f6723cd8a1c131fdbeb39cb75d7be;p=gedcom-parse.git diff --git a/gom/change_date.c b/gom/change_date.c index 1038df3..605039d 100644 --- a/gom/change_date.c +++ b/gom/change_date.c @@ -46,14 +46,10 @@ 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)); - - switch (ctxt->ctxt_type) { + struct change_date *chan = SUB_MAKEFUNC(change_date)(); + if (chan) { + int type = ctxt_type(ctxt); + switch (type) { case REC_FAM: ADDFUNC2_NOLIST(family,change_date)(ctxt, chan); break; case REC_INDI: @@ -69,7 +65,7 @@ Gedcom_ctxt sub_chan_start(_ELT_PARAMS_) case REC_SUBM: ADDFUNC2_NOLIST(submitter,change_date)(ctxt, chan); break; default: - UNEXPECTED_CONTEXT(ctxt->ctxt_type); + UNEXPECTED_CONTEXT(type); } result = MAKE_GOM_CTXT(elt, change_date, chan); } @@ -78,6 +74,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 +93,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 +112,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 +146,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;