@@ -62,11 +62,24 @@ _public_ int sd_device_enumerator_new(sd_device_enumerator **ret) {
6262 return 0 ;
6363}
6464
65+ static void device_unref_many (sd_device * * devices , size_t n ) {
66+ assert (devices || n == 0 );
67+
68+ for (size_t i = 0 ; i < n ; i ++ )
69+ sd_device_unref (devices [i ]);
70+ }
71+
72+ static void device_enumerator_unref_devices (sd_device_enumerator * enumerator ) {
73+ assert (enumerator );
74+
75+ device_unref_many (enumerator -> devices , enumerator -> n_devices );
76+ enumerator -> n_devices = 0 ;
77+ }
78+
6579static sd_device_enumerator * device_enumerator_free (sd_device_enumerator * enumerator ) {
6680 assert (enumerator );
6781
68- for (size_t i = 0 ; i < enumerator -> n_devices ; i ++ )
69- sd_device_unref (enumerator -> devices [i ]);
82+ device_enumerator_unref_devices (enumerator );
7083
7184 free (enumerator -> devices );
7285 set_free (enumerator -> match_subsystem );
@@ -744,10 +757,7 @@ int device_enumerator_scan_devices(sd_device_enumerator *enumerator) {
744757 enumerator -> type == DEVICE_ENUMERATION_TYPE_DEVICES )
745758 return 0 ;
746759
747- for (size_t i = 0 ; i < enumerator -> n_devices ; i ++ )
748- sd_device_unref (enumerator -> devices [i ]);
749-
750- enumerator -> n_devices = 0 ;
760+ device_enumerator_unref_devices (enumerator );
751761
752762 if (!set_isempty (enumerator -> match_tag )) {
753763 k = enumerator_scan_devices_tags (enumerator );
@@ -810,10 +820,7 @@ int device_enumerator_scan_subsystems(sd_device_enumerator *enumerator) {
810820 enumerator -> type == DEVICE_ENUMERATION_TYPE_SUBSYSTEMS )
811821 return 0 ;
812822
813- for (size_t i = 0 ; i < enumerator -> n_devices ; i ++ )
814- sd_device_unref (enumerator -> devices [i ]);
815-
816- enumerator -> n_devices = 0 ;
823+ device_enumerator_unref_devices (enumerator );
817824
818825 /* modules */
819826 if (match_subsystem (enumerator , "module" )) {
0 commit comments