[vlc-devel] [RFC PATCH 02/13] input: attachment: Add a private structure

Hugo Beauzée-Luyssen hugo at beauzee.fr
Fri Nov 6 10:22:17 CET 2020


which will hold the refcount in the next commit
---
 src/input/attachment.c | 38 +++++++++++++++++++++++++-------------
 1 file changed, 25 insertions(+), 13 deletions(-)

diff --git a/src/input/attachment.c b/src/input/attachment.c
index 1f9f2faf45..0b4bb99ab9 100644
--- a/src/input/attachment.c
+++ b/src/input/attachment.c
@@ -25,16 +25,28 @@
 #include <vlc_common.h>
 #include <vlc_input.h>
 
+struct input_attachment_priv
+{
+    input_attachment_t a;
+};
+
+static struct input_attachment_priv* input_attachment_priv( input_attachment_t* a )
+{
+    return container_of( a, struct input_attachment_priv, a );
+}
+
 void vlc_input_attachment_Delete( input_attachment_t *a )
 {
     if( !a )
         return;
 
+    struct input_attachment_priv* p = input_attachment_priv( a );
+
     free( a->p_data );
     free( a->psz_description );
     free( a->psz_mime );
     free( a->psz_name );
-    free( a );
+    free( p );
 }
 
 input_attachment_t *vlc_input_attachment_New( const char *psz_name,
@@ -43,25 +55,25 @@ input_attachment_t *vlc_input_attachment_New( const char *psz_name,
                                               const void *p_data,
                                               size_t i_data )
 {
-    input_attachment_t *a = (input_attachment_t *)malloc( sizeof (*a) );
+    struct input_attachment_priv *a = (struct input_attachment_priv *)malloc( sizeof (*a) );
     if( unlikely(a == NULL) )
         return NULL;
 
-    a->psz_name = strdup( psz_name ? psz_name : "" );
-    a->psz_mime = strdup( psz_mime ? psz_mime : "" );
-    a->psz_description = strdup( psz_description ? psz_description : "" );
-    a->i_data = i_data;
-    a->p_data = malloc( i_data );
-    if( i_data > 0 && likely(a->p_data != NULL) )
-        memcpy( a->p_data, p_data, i_data );
+    a->a.psz_name = strdup( psz_name ? psz_name : "" );
+    a->a.psz_mime = strdup( psz_mime ? psz_mime : "" );
+    a->a.psz_description = strdup( psz_description ? psz_description : "" );
+    a->a.i_data = i_data;
+    a->a.p_data = malloc( i_data );
+    if( i_data > 0 && likely(a->a.p_data != NULL) )
+        memcpy( a->a.p_data, p_data, i_data );
 
-    if( unlikely(a->psz_name == NULL || a->psz_mime == NULL
-              || a->psz_description == NULL || (i_data > 0 && a->p_data == NULL)) )
+    if( unlikely(a->a.psz_name == NULL || a->a.psz_mime == NULL
+              || a->a.psz_description == NULL || (i_data > 0 && a->a.p_data == NULL)) )
     {
-        vlc_input_attachment_Delete( a );
+        vlc_input_attachment_Delete( &a->a );
         a = NULL;
     }
-    return a;
+    return &a->a;
 }
 
 input_attachment_t *vlc_input_attachment_Duplicate( const input_attachment_t *a )
-- 
2.28.0



More information about the vlc-devel mailing list