void object_property_add_link(Object *obj, const char *name,

                              const char *type, Object **child,

                              void (*check)(Object *, const char *,

                                            Object *, Error **),

                              ObjectPropertyLinkFlags flags,

                              Error **errp)

{

    Error *local_err = NULL;

    LinkProperty *prop = g_malloc(sizeof(*prop));

    gchar *full_type;

    ObjectProperty *op;



    prop->child = child;

    prop->check = check;

    prop->flags = flags;



    full_type = g_strdup_printf("link<%s>", type);



    op = object_property_add(obj, name, full_type,

                             object_get_link_property,

                             check ? object_set_link_property : NULL,

                             object_release_link_property,

                             prop,

                             &local_err);

    if (local_err) {

        error_propagate(errp, local_err);

        g_free(prop);

        goto out;

    }



    op->resolve = object_resolve_link_property;



out:

    g_free(full_type);

}

void object_property_add_link(Object *obj, const char *name,

                              const char *type, Object **child,

                              void (*check)(Object *, const char *,

                                            Object *, Error **),

                              ObjectPropertyLinkFlags flags,

                              Error **errp)

{

    Error *local_err = NULL;

    LinkProperty *prop = g_malloc(sizeof(*prop));

    gchar *full_type;

    ObjectProperty *op;



    prop->child = child;

    prop->check = check;

    prop->flags = flags;



    full_type = g_strdup_printf("link<%s>", type);



    op = object_property_add(obj, name, full_type,

                             object_get_link_property,

                             check ? object_set_link_property : NULL,

                             object_release_link_property,

                             prop,

                             &local_err);

    if (local_err) {

        error_propagate(errp, local_err);

        g_free(prop);

        goto out;

    }



    op->resolve = object_resolve_link_property;



out:

    g_free(full_type);

}

                              void (*check)(Object *, const char *,
VAR_6voidVAR_6 VAR_6object_property_add_linkVAR_6(VAR_6ObjectVAR_6 *VAR_6VAR_0VAR_6, VAR_6constVAR_6 VAR_6charVAR_6 *VAR_6VAR_1VAR_6,

                              VAR_6constVAR_6 VAR_6charVAR_6 *VAR_6VAR_2VAR_6, VAR_6ObjectVAR_6 **VAR_6VAR_3VAR_6,

                              VAR_6voidVAR_6 (*VAR_6VAR_4VAR_6)(VAR_6ObjectVAR_6 *, VAR_6constVAR_6 VAR_6charVAR_6 *,

                                            VAR_6ObjectVAR_6 *, VAR_6ErrorVAR_6 **),

                              VAR_6ObjectPropertyLinkFlagsVAR_6 VAR_6flagsVAR_6,

                              VAR_6ErrorVAR_6 **VAR_6errpVAR_6)

{

    VAR_6ErrorVAR_6 *VAR_6local_errVAR_6 = VAR_6NULLVAR_6;

    VAR_6LinkPropertyVAR_6 *VAR_6propVAR_6 = VAR_6g_mallocVAR_6(VAR_6sizeofVAR_6(*VAR_6propVAR_6));

    VAR_6gcharVAR_6 *VAR_6full_typeVAR_6;

    VAR_6ObjectPropertyVAR_6 *VAR_6opVAR_6;



    VAR_6propVAR_6->VAR_6VAR_3VAR_6 = VAR_6VAR_3VAR_6;

    VAR_6propVAR_6->VAR_6VAR_4VAR_6 = VAR_6VAR_4VAR_6;

    VAR_6propVAR_6->VAR_6flagsVAR_6 = VAR_6flagsVAR_6;



    VAR_6full_typeVAR_6 = VAR_6g_strdup_printfVAR_6("VAR_6linkVAR_6<%VAR_6sVAR_6>", VAR_6VAR_2VAR_6);



    VAR_6opVAR_6 = VAR_6object_property_addVAR_6(VAR_6VAR_0VAR_6, VAR_6VAR_1VAR_6, VAR_6full_typeVAR_6,

                             VAR_6object_get_link_propertyVAR_6,

                             VAR_6VAR_4VAR_6 ? VAR_6object_set_link_propertyVAR_6 : VAR_6NULLVAR_6,

                             VAR_6object_release_link_propertyVAR_6,

                             VAR_6propVAR_6,

                             &VAR_6local_errVAR_6);

    VAR_6ifVAR_6 (VAR_6local_errVAR_6) {

        VAR_6error_propagateVAR_6(VAR_6errpVAR_6, VAR_6local_errVAR_6);

        VAR_6g_freeVAR_6(VAR_6propVAR_6);

        VAR_6gotoVAR_6 VAR_6outVAR_6;

    }



    VAR_6opVAR_6->VAR_6resolveVAR_6 = VAR_6object_resolve_link_propertyVAR_6;



VAR_6outVAR_6:

    VAR_6g_freeVAR_6(VAR_6full_typeVAR_6);

}

VAR_6voidVAR_6 VAR_6object_property_add_linkVAR_6(VAR_6ObjectVAR_6 *VAR_6VAR_0VAR_6, VAR_6constVAR_6 VAR_6charVAR_6 *VAR_6VAR_1VAR_6,
VAR_6constVAR_6 VAR_6charVAR_6 *VAR_6VAR_2VAR_6, VAR_6ObjectVAR_6 **VAR_6VAR_3VAR_6,
VAR_6voidVAR_6 (*VAR_6VAR_4VAR_6)(VAR_6ObjectVAR_6 *, VAR_6constVAR_6 VAR_6charVAR_6 *,
VAR_6ObjectVAR_6 *, VAR_6ErrorVAR_6 **),
VAR_6ObjectPropertyLinkFlagsVAR_6 VAR_6flagsVAR_6,
VAR_6ErrorVAR_6 **VAR_6errpVAR_6)
{ VAR_6ErrorVAR_6 *VAR_6local_errVAR_6 = VAR_6NULLVAR_6; VAR_6LinkPropertyVAR_6 *VAR_6propVAR_6 = VAR_6g_mallocVAR_6(VAR_6sizeofVAR_6(*VAR_6propVAR_6)); VAR_6gcharVAR_6 *VAR_6full_typeVAR_6; VAR_6ObjectPropertyVAR_6 *VAR_6opVAR_6; VAR_6propVAR_6->VAR_6VAR_3VAR_6 = VAR_6VAR_3VAR_6; VAR_6propVAR_6->VAR_6VAR_4VAR_6 = VAR_6VAR_4VAR_6; VAR_6propVAR_6->VAR_6flagsVAR_6 = VAR_6flagsVAR_6; VAR_6full_typeVAR_6 = VAR_6g_strdup_printfVAR_6("VAR_6linkVAR_6<%VAR_6sVAR_6>", VAR_6VAR_2VAR_6); VAR_6opVAR_6 = VAR_6object_property_addVAR_6(VAR_6VAR_0VAR_6, VAR_6VAR_1VAR_6, VAR_6full_typeVAR_6,
VAR_6object_get_link_propertyVAR_6,
VAR_6VAR_4VAR_6 ? VAR_6object_set_link_propertyVAR_6 : VAR_6NULLVAR_6,
VAR_6object_release_link_propertyVAR_6,
VAR_6propVAR_6,
&VAR_6local_errVAR_6); VAR_6ifVAR_6 (VAR_6local_errVAR_6) { VAR_6error_propagateVAR_6(VAR_6errpVAR_6, VAR_6local_errVAR_6); VAR_6g_freeVAR_6(VAR_6propVAR_6); VAR_6gotoVAR_6 VAR_6outVAR_6; } VAR_6opVAR_6->VAR_6resolveVAR_6 = VAR_6object_resolve_link_propertyVAR_6; VAR_6outVAR_6:
VAR_6g_freeVAR_6(VAR_6full_typeVAR_6); }