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;
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)
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) {
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;
{
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;