]> git.sesse.net Git - vlc/commitdiff
Review and fix ACL duplication - really closes #262
authorRémi Denis-Courmont <rem@videolan.org>
Sat, 16 Jul 2005 19:30:09 +0000 (19:30 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Sat, 16 Jul 2005 19:30:09 +0000 (19:30 +0000)
src/stream_output/acl.c

index 2b1f87461584d61c3e4fabf1721aee8c49b77c12..edb29cc0928a0111442d7056f543b4422e552f57 100644 (file)
@@ -47,7 +47,6 @@
 #include "network.h"
 
 /* FIXME: rwlock on acl, but libvlc doesn't implement rwlock */
-/* FIXME: move to src/stream_output/whatever */
 typedef struct vlc_acl_entry_t
 {
     uint8_t    host[17];
@@ -165,6 +164,9 @@ int ACL_AddNet( vlc_acl_t *p_acl, const char *psz_ip, int i_len,
     if( p_ent == NULL )
         return -1;
 
+    p_acl->p_entries = p_ent;
+    p_ent += i_size;
+
     i_family = ACL_Resolve( p_acl->p_owner, p_ent->host, psz_ip );
     if( i_family < 0 )
     {
@@ -181,9 +183,6 @@ int ACL_AddNet( vlc_acl_t *p_acl, const char *psz_ip, int i_len,
         if( i_family == AF_INET )
             i_len += 96;
 
-        p_acl->p_entries = p_ent;
-        p_ent += i_size;
-
         if( i_len > 128 )
             i_len = 128;
         else
@@ -231,22 +230,28 @@ vlc_acl_t *__ACL_Duplicate( vlc_object_t *p_this, const vlc_acl_t *p_acl )
     if( p_dupacl == NULL )
         return NULL;
 
-    p_dupacl->p_entries = (vlc_acl_entry_t *)
-        malloc( p_acl->i_size * sizeof( vlc_acl_entry_t ) );
-    if( p_dupacl->p_entries == NULL )
+    if( p_acl->i_size )
     {
-        free( p_dupacl );
-        return NULL;
-    }   
+        p_dupacl->p_entries = (vlc_acl_entry_t *)
+            malloc( p_acl->i_size * sizeof( vlc_acl_entry_t ) );
+
+        if( p_dupacl->p_entries == NULL )
+        {
+            free( p_dupacl );
+            return NULL;
+        }
+
+        memcpy( p_dupacl->p_entries, p_acl->p_entries,
+                p_acl->i_size * sizeof( vlc_acl_entry_t ) );
+    }
+    else
+        p_dupacl->p_entries = NULL;
 
     vlc_object_yield( p_this );
     p_dupacl->p_owner = p_this;
     p_dupacl->i_size = p_acl->i_size;
     p_dupacl->b_allow_default = p_acl->b_allow_default;
 
-    memcpy( p_dupacl->p_entries, p_acl->p_entries,
-            p_dupacl->i_size * sizeof( vlc_acl_entry_t ) );
-    
     return p_dupacl;
 }