]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
fix memory leak get device list
authorBastian Dehn <hhaalo@arcor.de>
Sun, 2 Mar 2025 07:00:00 +0000 (08:00 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 2 Mar 2025 07:10:37 +0000 (08:10 +0100)
src/kds_s2000w_net.c
tests/kds_s2000w_net_tests.c

index 64c326061059e05f9561cbf371d6dd38ed3ed9b6..67936dfa61b8b9a99e0d673b5207d00c010361d9 100644 (file)
@@ -10,8 +10,7 @@
 #define MODEL "Kodak Alaris s2000w series"
 #define TYPE "sheetfed scanner"
 
-SANE_Device* device_info_ptr;
-SANE_Device device_info;
+SANE_Device** device_info_ptr = NULL;
 
 SANE_Status sane_kds_s2000w_net_init(SANE_Int* version_code, SANE_Auth_Callback authorize)
 {
@@ -25,6 +24,11 @@ SANE_Status sane_kds_s2000w_net_init(SANE_Int* version_code, SANE_Auth_Callback
 void sane_kds_s2000w_net_exit(void)
 {
        kds_s2000w_debug_printf(ALL, "sane_kds_s2000w_net_exit");
+
+       free(device_info_ptr[0]);
+       device_info_ptr[0] = NULL;
+       free(device_info_ptr);
+       device_info_ptr = NULL;
 }
 
 SANE_Status sane_kds_s2000w_net_get_devices(SANE_Device*** device_list,
@@ -35,12 +39,17 @@ SANE_Status sane_kds_s2000w_net_get_devices(SANE_Device*** device_list,
        if (local_only)
                return SANE_STATUS_NO_MEM;
 
-       device_info.name = NAME;
-       device_info.vendor = VENDOR;
-       device_info.model = MODEL;
-       device_info.type = TYPE;
-       device_info_ptr = &device_info;
-       *device_list = &device_info_ptr;
+       if (device_info_ptr == NULL) {
+               device_info_ptr = malloc(sizeof(SANE_Device*) * 2);
+               device_info_ptr[0] = malloc(sizeof(SANE_Device));
+       }
+
+       device_info_ptr[0]->name = NAME;
+       device_info_ptr[0]->vendor = VENDOR;
+       device_info_ptr[0]->model = MODEL;
+       device_info_ptr[0]->type = TYPE;
+       device_info_ptr[1] = NULL;
+       *device_list = device_info_ptr;
 
        return SANE_STATUS_GOOD;
 }
index 48a4ef7d1183e794ed793bd37806bbcd375c93bd..ea9052a72391ba1e31911a2bddcfdcec132c7a7f 100644 (file)
@@ -30,6 +30,7 @@ void kds_s2000w_net_get_devices_test()
        assert_string_equal(device_list[0][0]->vendor, "Kodak");
        assert_string_equal(device_list[0][0]->model, "Kodak Alaris s2000w series");
        assert_string_equal(device_list[0][0]->type, "sheetfed scanner");
+       assert_null(device_list[0][1]);
 
        free(device_list);
        device_list = NULL;