]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Add a bio_reader_t constructor variant freeing passed data during destruction
authorMartin Willi <martin@revosec.ch>
Fri, 11 Jan 2013 14:27:24 +0000 (15:27 +0100)
committerMartin Willi <martin@revosec.ch>
Tue, 15 Jan 2013 16:43:05 +0000 (17:43 +0100)
src/libstrongswan/bio/bio_reader.c
src/libstrongswan/bio/bio_reader.h

index 17815d6c00e8d4baea9115eee409cf156b9d6438..29b9e7279dce707761aadbe71a79cef18c84ad5a 100644 (file)
@@ -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;
+}
index 3162f3edaf67739e5612f50c6fa422e7511a2658..475422428d86c03c7740146ee3fae8a8b0a8f175 100644 (file)
@@ -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_ @}*/