From a5916b907efea6ee54ec1936588c6f32c0d0e548 Mon Sep 17 00:00:00 2001 From: Peter Verthez Date: Sun, 8 Dec 2002 13:13:23 +0000 Subject: [PATCH] Added some common code + fixed memory leak. --- gom/gom_internal.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/gom/gom_internal.h b/gom/gom_internal.h index 91a6932..b307550 100644 --- a/gom/gom_internal.h +++ b/gom/gom_internal.h @@ -212,6 +212,46 @@ void NULL_DESTROY(void* anything); return (Gedcom_ctxt)result; \ } +#define STRING_END_CB(STRUCTTYPE,CB_NAME,FIELD) \ + void CB_NAME(_ELT_END_PARAMS_) \ + { \ + Gom_ctxt ctxt = (Gom_ctxt)self; \ + if (! ctxt) \ + NO_CONTEXT; \ + else { \ + struct STRUCTTYPE *obj = SAFE_CTXT_CAST(STRUCTTYPE, ctxt); \ + if (obj) { \ + char *str = GEDCOM_STRING(parsed_value); \ + char *newvalue = strdup(str); \ + if (! newvalue) \ + MEMORY_ERROR; \ + else \ + obj->FIELD = newvalue; \ + } \ + destroy_gom_ctxt(ctxt); \ + } \ + } + +#define STRING_END_REC_CB(STRUCTTYPE,CB_NAME,FIELD) \ + void CB_NAME(_REC_END_PARAMS_) \ + { \ + Gom_ctxt ctxt = (Gom_ctxt)self; \ + if (! ctxt) \ + NO_CONTEXT; \ + else { \ + struct STRUCTTYPE *obj = SAFE_CTXT_CAST(STRUCTTYPE, ctxt); \ + if (obj) { \ + char *str = GEDCOM_STRING(parsed_value); \ + char *newvalue = strdup(str); \ + if (! newvalue) \ + MEMORY_ERROR; \ + else \ + obj->FIELD = newvalue; \ + } \ + destroy_gom_ctxt(ctxt); \ + } \ + } + #define DATE_CB(STRUCTTYPE,CB_NAME,FIELD) \ Gedcom_ctxt CB_NAME(_ELT_PARAMS_) \ { \ -- 2.30.2