vici: Add a destroy method to builder, allowing cancellation without error
When cancelling a builder, finalize throws an error which we might prefer to avoid.
This commit is contained in:
@@ -206,6 +206,13 @@ METHOD(vici_builder_t, end_list, void,
|
|||||||
add(this, VICI_LIST_END);
|
add(this, VICI_LIST_END);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
METHOD(vici_builder_t, destroy, void,
|
||||||
|
private_vici_builder_t *this)
|
||||||
|
{
|
||||||
|
this->writer->destroy(this->writer);
|
||||||
|
free(this);
|
||||||
|
}
|
||||||
|
|
||||||
METHOD(vici_builder_t, finalize, vici_message_t*,
|
METHOD(vici_builder_t, finalize, vici_message_t*,
|
||||||
private_vici_builder_t *this)
|
private_vici_builder_t *this)
|
||||||
{
|
{
|
||||||
@@ -215,14 +222,12 @@ METHOD(vici_builder_t, finalize, vici_message_t*,
|
|||||||
{
|
{
|
||||||
DBG1(DBG_ENC, "vici builder error: %u errors (section: %u, list %u)",
|
DBG1(DBG_ENC, "vici builder error: %u errors (section: %u, list %u)",
|
||||||
this->error, this->section, this->list);
|
this->error, this->section, this->list);
|
||||||
this->writer->destroy(this->writer);
|
destroy(this);
|
||||||
free(this);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
product = vici_message_create_from_data(
|
product = vici_message_create_from_data(
|
||||||
this->writer->extract_buf(this->writer), TRUE);
|
this->writer->extract_buf(this->writer), TRUE);
|
||||||
this->writer->destroy(this->writer);
|
destroy(this);
|
||||||
free(this);
|
|
||||||
return product;
|
return product;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,6 +250,7 @@ vici_builder_t *vici_builder_create()
|
|||||||
.begin_list = _begin_list,
|
.begin_list = _begin_list,
|
||||||
.end_list = _end_list,
|
.end_list = _end_list,
|
||||||
.finalize = _finalize,
|
.finalize = _finalize,
|
||||||
|
.destroy = _destroy,
|
||||||
},
|
},
|
||||||
.writer = bio_writer_create(0),
|
.writer = bio_writer_create(0),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -119,6 +119,14 @@ struct vici_builder_t {
|
|||||||
* @return vici message, NULL on error
|
* @return vici message, NULL on error
|
||||||
*/
|
*/
|
||||||
vici_message_t* (*finalize)(vici_builder_t *this);
|
vici_message_t* (*finalize)(vici_builder_t *this);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy a vici builder without finalization.
|
||||||
|
*
|
||||||
|
* Note that finalize() already destroys the message, and calling destroy()
|
||||||
|
* is required only if the message does not get finalize()d.
|
||||||
|
*/
|
||||||
|
void (*destroy)(vici_builder_t *this);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user