diff options
author | Martin Willi <martin@revosec.ch> | 2013-01-11 15:27:24 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-01-15 17:43:05 +0100 |
commit | 7fb81886b9024047f9e903884f330e649112ed0e (patch) | |
tree | 0615eaf126d0ff035b27d96868d241bd99c28989 | |
parent | ee90c78998911aea33fbf64e38f164902559e593 (diff) | |
download | strongswan-7fb81886b9024047f9e903884f330e649112ed0e.tar.bz2 strongswan-7fb81886b9024047f9e903884f330e649112ed0e.tar.xz |
Add a bio_reader_t constructor variant freeing passed data during destruction
-rw-r--r-- | src/libstrongswan/bio/bio_reader.c | 20 | ||||
-rw-r--r-- | src/libstrongswan/bio/bio_reader.h | 13 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/libstrongswan/bio/bio_reader.c b/src/libstrongswan/bio/bio_reader.c index 17815d6c0..29b9e7279 100644 --- a/src/libstrongswan/bio/bio_reader.c +++ b/src/libstrongswan/bio/bio_reader.c @@ -36,6 +36,11 @@ struct private_bio_reader_t { * Remaining data to process */ chunk_t buf; + + /** + * Optional data to free during destruction + */ + chunk_t cleanup; }; METHOD(bio_reader_t, remaining, u_int32_t, @@ -302,6 +307,7 @@ METHOD(bio_reader_t, read_data32, bool, METHOD(bio_reader_t, destroy, void, private_bio_reader_t *this) { + free(this->cleanup.ptr); free(this); } @@ -339,3 +345,17 @@ bio_reader_t *bio_reader_create(chunk_t data) return &this->public; } + +/** + * See header + */ +bio_reader_t *bio_reader_create_own(chunk_t data) +{ + private_bio_reader_t *this; + + this = (private_bio_reader_t*)bio_reader_create(data); + + this->cleanup = data; + + return &this->public; +} diff --git a/src/libstrongswan/bio/bio_reader.h b/src/libstrongswan/bio/bio_reader.h index 3162f3eda..475422428 100644 --- a/src/libstrongswan/bio/bio_reader.h +++ b/src/libstrongswan/bio/bio_reader.h @@ -187,7 +187,18 @@ struct bio_reader_t { /** * Create a bio_reader instance. + * + * @param data data buffer, must survive lifetime of reader + * @return reader */ bio_reader_t *bio_reader_create(chunk_t data); -#endif /** bio_reader_H_ @}*/ +/** + * Create a bio_reader instance owning buffer. + * + * @param data data buffer, gets freed with destroy() + * @return reader + */ +bio_reader_t *bio_reader_create_own(chunk_t data); + +#endif /** BIO_READER_H_ @}*/ |